可视化神器Plotly_Express详解

参考资料:Plotly_express官方API教程Plotly_express官方画图教程

一、概述

Plotly 是新一代的数据可视化神器,TopQ量化开源团队,虽然plotly功能强大,却一直没有得到广泛应用,大部分py开发人员,还在使用陈旧的matplotlib,其中最重要的原因,就是plotly的设置过于繁琐。为此,plotly推出了其简化接口:Plotly Express,简称:px。

Plotly Express是对 Plotly.py 的高级封装,采用ROR等新一代“约定优先”编程模式,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表。

Plotly Express内置的图表组合,涵盖了90%常用的绘图需要,Python画图,首推Plotly Express,毫无疑问。

二、图表说明

  1. scatter:散点图
    在散点图中,每行data_frame由2D空间中的符号标记表示;

  2. scatter_3d:三维散点图
    在3D散点图中,每行data_frame由3D空间中的符号标记表示;

  3. scatter_polar:极坐标散点图
    在极坐标散点图中,每行data_frame由极坐标中的符号标记表示;

  4. scatter_ternary:三元散点图
    在三元散点图中,每行data_frame由三元坐标中的符号标记表示;

  5. scatter_mapbox:地图散点图
    在Mapbox散点图中,每一行data_frame都由Mapbox地图上的符号标记表示;

  6. scatter_geo:地理坐标散点图
    在地理散点图中,每一行data_frame都由地图上的符号标记表示;

  7. scatter_matrix:矩阵散点图
    在散点图矩阵(或SPLOM)中,每行data_frame由多个符号标记表示,在2D散点图的网格的每个单元格中有一个,其将每对dimensions彼此相对绘制;

  8. density_contour:密度等值线图(双变量分布)
    在密度等值线图中,行data_frame被组合在一起,成为轮廓标记,以可视化该值的聚合函数histfunc(例如:计数或总和)的2D分布z;

  9. density_heatmap:密度热力图(双变量分布)
    在密度热图中,行data_frame被组合在一起,成为彩色矩形瓦片,以可视化该值的聚合函数histfunc(例如:计数或总和)的2D分布 z;

  10. line:线条图
    在2D线图中,每行data_frame表示为2D空间中折线标记的顶点;

  11. line_polar:极坐标线条图
    在极线图中,每行data_frame表示为极坐标中折线标记的顶点;

  12. line_ternary:三元线条图
    在三元线图中,每行data_frame表示为三元坐标中折线标记的顶点;

  13. line_mapbox:地图线条图
    在Mapbox线图中,每一行data_frame表示为Mapbox地图上折线标记的顶点;

  14. line_geo:地理坐标线条图
    在地理线图中,每一行data_frame表示为地图上折线标记的顶点;

  15. parallel_coordinates:平行坐标图
    在平行坐标图中,每行data_frame由折线标记表示,该折线标记穿过一组平行轴,每个平行轴对应一个平行轴 dimensions;

  16. parallel_categories:并行类别图
    在并行类别(或平行集)图中,每行data_frame与其他共享相同值的行组合,dimensions然后通过一组平行轴绘制为折线标记,每个平行轴对应一个dimensions;

  17. area:堆积区域图
    在堆积区域图中,每行data_frame表示为2D空间中折线标记的顶点。连续折线之间的区域被填充;

  18. bar:条形图
    在条形图中,每行data_frame表示为矩形标记;

  19. bar_polar:极坐标条形图
    在极坐标条形图中,每一行都data_frame表示为极坐标中的楔形标记;

  20. violin:小提琴图
    在小提琴图中,将data_frame每一行分组成一个曲线标记,以便可视化它们的分布;

  21. box:箱形图
    在箱形图中,data_frame的每一行被组合在一起成为盒须标记,以显示它们的分布;

  22. strip:长条图
    在长条图中,每一行data_frame表示为类别中的抖动标记;

  23. histogram:直方图
    在直方图中,每一行data_frame被组合在一起成为矩形标记,以可视化该值的聚合函数histfunc(例如,计数或总和)的1D分布y(或者x,如果orientation是'h'时);

  24. choropleth:等高(值)区域地图
    在等值区域图中,每行data_frame由地图上的彩色区域标记表示;


三、子模块

import numpy as np
import pandas as pd
import plotly_express as px

1. 内置数据集

  • 不同国家历年GDP收入与人均寿命。包含字段:国家、洲、年份、平均寿命、人口数量、GDP、国家简称、国家编号;
gapminder = px.data.gapminder() 
  • 餐馆的订单流水。包含字段:总账单、小费、性别、是否抽烟、星期几、就餐时间、人数;
tips = px.data.tips()  
  • 花:萼片长、萼片宽、花瓣长、花瓣宽、种类、种类编号
iris = px.data.iris()  
  • 风力等级:方向、强度、数值
wind = px.data.wind()        
  • 2013年蒙特利尔市长选举投票结果。包括字段:区域、Coderre票数、Bergeron票数、Joly票数、总票数、胜者、结果(占比分类)
election = px.data.election() 
  • 蒙特利尔一个区域中心附近的汽车共享服务的可用性。包括字段:纬度、经度、汽车小时数、高峰小时
carshare = px.data.carshare()

2. 内置颜色面板

  • 开源包:卡通片的色彩和序列
px.colors.carto
  • 开源包:CMOcean项目的色阶
px.colors.cmocean
  • 开源包:来自ColorBrewer2项目的色阶和序列
px.colors.colorbrewer
  • 周期性色标适用于具有自然周期结构的连续数据
px.colors.cyclical 
  • 分散色标适用于具有自然中点的连续数据
px.colors.diverging     
  • 定性色标适用于没有自然顺序的数据
px.colors.qualitative
  • 顺序色标适用于大多数连续数据
px.colors.sequential        
  • 举例展示
px.colors.qualitative.swatches() 
  • 举例效果

四、 散点图

1. 方法定义
def scatter(data_frame, x=None, y=None, color=None, symbol=None, size=None, 
            hover_name=None, hover_data=None, text=None, facet_row=None, 
            facet_col=None, error_x=None, error_x_minus=None, error_y=None, 
            error_y_minus=None, animation_frame=None, animation_group=None, 
            category_orders={}, labels={}, color_discrete_sequence=None, 
            color_discrete_map={}, color_continuous_scale=None, 
            range_color=None, color_continuous_midpoint=None, 
            symbol_sequence=None, symbol_map={}, opacity=None,
            size_max=None, marginal_x=None, marginal_y=None, trendline=None,
            trendline_color_override=None, log_x=False, log_y=False,
            range_x=None, range_y=None, render_mode='auto', title=None, 
            template=None, width=None, height=None):

    return
2. 参数说明
  • data_frame:目标数据,类型为dataframe;

  • x :指定列名。列中的值用于笛卡尔坐标中沿 X 轴的定位标记。图表类型为水平柱状图时,这些值用作参数histfunc的入参;

  • y :指定列名。列中的值用于笛卡尔坐标中沿 Y 轴的定位标记。图表类型为垂直柱状图时,这些值用作参数histfunc的入参;

  • color:指定列名。为列中的不同值,(由px)自动匹配不同的标记颜色;若列为数值数据时,还会自动生成连续色标;

  • symbol:指定列名。为列中的不同值,设置不同的标记形状;

  • size:指定列名。为列中的不同值,设置不同的标记大小;

  • hover_name:指定列名。将列中的值,加粗显示在悬停提示内容的正上方;

  • hover_data:指定列名组成的列表。所有列的值,显示在悬停提示内容中,位于x/y值的下方。指定的列与x/y重复时仅显示1条数据;

  • text:指定列名。列中的值,在图的标记中显示为文本标签,同时也显示在悬停提示内容中;

  • facet_row:指定列名。根据列中不同的(N个)值,在垂直方向上显示N个子图,并在子图右侧,垂直方向上,进行文本标注;

  • facet_col:指定列名。根据列中不同的(N个)值,在水平方向上显示N个子图,并在子图上方,水平方向上,进行文本标注;

  • error_x:指定列名。显示误差线,列中的值用于调整 X 轴误差线的大小。如果参数error_x_minus == None,则悬停提示内容中,显示对称的误差值;否则显示正向的误差值。该列通常是基于元数据加工的结果,目的是统计元数据指标的误差值,一般会用元数据除以100的整数倍。

  • error_x_minus:指定列名。列中的值用于在负方向调整 X 轴误差线的大小,如果参数error_x==None,则直接忽略该参数;

  • error_y:指定列名。显示误差线,列中的值用于调整 Y 轴误差线的大小。如果参数error_y_minus == None,则悬停提示内容中,显示对称的误差值;否则显示正向的误差值。该列通常是基于元数据加工的结果,目的是统计元数据指标的误差值,一般会用元数据除以100的整数倍。

  • error_y_minus:指定列名。列中的值用于在负方向调整 Y 轴误差线的大小,如果参数error_y==None,则直接忽略该参数;

  • animation_frame:指定列名。列中的值用于为动画帧指定标记,即设置滑动条;

  • animation_group:指定列名。列中的值用于提供跨动画帧的联动匹配;

  • category_orders:带有字符串键和字符串列表值的字典,默认为{},此参数用于强制每列的特定值排序,dict键是列名,dict值是指定的排列顺序的字符串列表。默认情况下,在Python 3.6+中,轴,图例和构面中的分类值的顺序取决于在data_frame中首次出现的顺序,而在3.6以下的Python中,默认不保证顺序,该参数即为解决此类问题而设计;

  • labels:带字符串键和字符串值的dict,默认为{}。此参数用于修改图表中显示的列名称。默认情况下,图表中使用列名称作为轴标题、图例条目、悬停提示等,此参数可以进行修改,dict的键是列名,dict值是修改的新名称;

  • color_discrete_sequence:有效的CSS颜色字符串列表,取自plotly_express的color子模块。当参数color指定的列不是数值数据时,该参数为color列指定颜色序列,若category_orders参数不为None,则按category_orders中设定的顺序循环执行color_discrete_sequence,除非color列的值在参数color_discrete_map入参的dict键中;

  • color_discrete_map:带字符串键和有效CSS颜色字符串值的dict,默认为{}。当参数color指定的列不是数值数据时,该参数用于将特定颜色分配给,与特定值对应的标记,color_discrete_map中的键为color表示的列值。其优先级高,会覆盖color_discrete_sequence参数中的设置;

  • color_continuous_scale:有效的CSS颜色字符串列表,取自plotly_express的color子模块。当参数color指定的列是数值数据时,为连续色标,设置指定的颜色序列。实际上,color指定列时,px会自动匹配颜色:1)若指定列是数值数据,通过参数color_continuous_scale可以设定具体的颜色序列;2)若指定列是非数值数据时,通过参数color_discrete_sequence可以设定具体的颜色序列(循环匹配);通过参数color_discrete_map可以为列中不同值,指定具体的颜色;

  • range_color:2个数字元素组成的列表,参数用于设定连续色标上的自动缩放,即边界的大小值;

  • color_continuous_midpoint:数字,默认为无。如果设置,则计算连续色标的边界以具有所需的中点。 若使用plotly_express.colors.diverging色标作为color_continuous_scale的如参时,建议设置此值;

  • symbol_sequence:定义plotly.js符号的字符串列表。参数用于为列中的值分配符号,除非symbol的值是symbol_map中的键。分配符号的顺序:按按category_orders中设置的顺序循环执行;

  • symbol_map:带字符串键和定义plotly.js符号的字符串值的dict,默认值{}。该参数用于将特定符号分配给,与特定值对应的标记,symbol_map中的键为symbol表示的列值。其优先级高,会覆盖symbol_sequence参数中的设置;

  • opacity:数字,介于0和1之间,设置标记的不透明度;

  • size_max:整数,默认为20。使用size参数时,设置最大标记的大小;

  • marginal_x:字符串,取值:rug(细条)、box(箱图)、violin(小提琴图)、histogram(直方图)。该参数用于在主图上方,绘制一个水平子图,以便对x分布,进行可视化;

  • marginal_y:字符串,取值:rug(细条)、box(箱图)、violin(小提琴图)、histogram(直方图)。该参数用于在主图右侧,绘制一个垂直子图,以便对y分布,进行可视化;

  • trendline:字符串,取值:ols、lowess、None。取值为ols时,将为每个离散颜色/符号组,绘制一个普通最小二乘回归线;取值为lowess时,则将为每个离散颜色/符号组,绘制局部加权散点图平滑线;

  • trendline_color_override:字符串,有效的CSS颜色。如果设置了参数trendline趋势线,则将以此颜色绘制所有趋势线;

  • log_x:布尔值,默认为False。如果为True,则 X 轴在笛卡尔坐标系中进行对数缩放;

  • log_y:布尔值,默认为False。如果为True,则 Y 轴在笛卡尔坐标系中进行对数缩放;

  • range_x:2个数字元素组成的列表,用于设定笛卡尔坐标中 X 轴上的自动缩放,即边界的大小值;

  • range_y:2个数字元素组成的列表,用于设定笛卡尔坐标中 Y 轴上的自动缩放,即边界的大小值;

  • render_mode:字符串,取值:auto(默认)、svg、webgl。用于控制绘制标记的浏览器API,svg适用于少于1000的数据,并允许完全矢量化输出;webgl可以接收1000点以上的数据;auto使用启发式方法来选择模式;

  • title:字符串,设置图表的标题;

  • template:字符串或Plotly.py模板对象,设置图表的背景颜色。有三个内置的 Plotly 主题: plotly, plotly_white 和 plotly_dark;

  • width:整数,默认无,设置图表的宽度(以像素为单位);

  • height:整数,默认600,设置图表的高度(以像素为单位);

3. 说明
  • 实际上,其它的图表,其方法中的绝大多数参数和散点图的参数,用法基本相同,本文不再详细解释其它图表的定义和方法,具体可以参见官方API文档,下文会展示部分图表的制作;

五、 图表制作

1. 散点图和折线图

  • 简单散点图
px.scatter(iris, x="sepal_width", y="sepal_length")
  • 散点图,为不同种类的花自动配置颜色
px.scatter(iris, x="sepal_width", y="sepal_length", color="species")
  • 散点图,分别在图表的上方、右侧增加直方图、细条图
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           marginal_y="rug", marginal_x="histogram")
  • 散点图,分别在图表的上方、右侧增加箱形图、小提琴图,并添加趋势线
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           marginal_y="violin", marginal_x="box", trendline="ols")
  • 散点图,为标记添加x、y轴方向上的误差线
iris["e"] = iris["sepal_width"]/100   --设置误差值、删除误差值:del iris["e"] 
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           error_x="e", error_y="e")
  • 散点图,在垂直(y)、水平(x)方向上,按指定的列,单独展示子图表,并为列值进行排序
px.scatter(tips, x="total_bill", y="tip", facet_row="time", facet_col="day", 
           color="smoker", trendline="ols",category_orders={"day": ["Thur", 
           "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
  • 散点图,颜色列为数值数据时,会自动展示色标
px.scatter(tips, x="total_bill", y="tip", color="size", facet_col="sex",
           color_continuous_scale=px.colors.sequential.Viridis, 
           render_mode="webgl")
  • 散点图,设置标记大小依赖的列,对 x 轴进行缩放处理
px.scatter(gapminder.query("year==2007"), x="gdpPercap", y="lifeExp", 
           size="pop", color="continent",hover_name="country", log_x=True, 
           size_max=60)
  • 散点图,增加滑动条,设置坐标轴取值范围
px.scatter(gapminder, x="gdpPercap", y="lifeExp", animation_frame="year", 
           animation_group="country", size="pop", color="continent", 
           hover_name="country", facet_col="continent",log_x=True, 
           size_max=45, range_x=[100,100000], range_y=[25,90])
  • 矩阵散点图,查看指标相关性
px.scatter_matrix(iris)
  • 矩阵散点图,指定部分列进行展示。散点图矩阵(SPLOM)是允许可视化多个链接的散点图,方便查看数据集中的每个变量与其他变量的关系。 数据集中的每一行都显示为每个图中的一个点,可以进行缩放、平移或选择操作,所有图都是链接在一起的
px.scatter_matrix(iris, dimensions=["sepal_width", "sepal_length", 
                  "petal_width", "petal_length"], color="species")
  • 平行坐标图,多维数据连线,允许同时显示3个以上的连续变量。 dataframe 中的每一行都是一行,可以拖动尺寸,以重新排序它们,并选择值范围之间的交叉点。
px.parallel_coordinates(iris, color="species_id", labels={"species_id": 
            "Species", "sepal_width": "Sepal Width", "sepal_length": 
            "Sepal Length",  "petal_width": "Petal Width", "petal_length": 
            "Petal Length"},color_continuous_scale=px.colors.diverging.
            Tealrose, color_continuous_midpoint=2)
  • 并行类别图,是并行坐标的分类模拟:使用它们可视化数据集中多组类别之间的关系
px.parallel_categories(tips, color="size", color_continuous_scale=px.
            colors.sequential.Inferno)
  • 线条图,设置线条类型
px.line(gapminder, x="year", y="lifeExp", color="continent", 
        line_group="country", hover_name="country",
        line_shape="spline", render_mode="svg")
  • 堆积区域图
px.area(gapminder, x="year", y="pop", color="continent", 
        line_group="country")

2. 可视化分布

  • 密度等值线图
px.density_contour(iris, x="sepal_width", y="sepal_length")
  • 密度等值线图,分别在图表的上方、右侧增加细条图、直方图
px.density_contour(iris, x="sepal_width", y="sepal_length", color="species", 
                   marginal_x="rug", marginal_y="histogram")
  • 密度热力图
px.density_heatmap(iris, x="sepal_width", y="sepal_length", 
                   marginal_x="rug", marginal_y="histogram")
  • 条形图,设置堆积类型
px.bar(tips, x="sex", y="total_bill", color="smoker", barmode="group")
  • 条形图,在垂直(y)、水平(x)方向上,按指定的列,单独展示子图表,并为列值进行排序
px.bar(tips, x="sex", y="total_bill", color="smoker", barmode="group", 
       facet_row="time", facet_col="day", category_orders={"day": ["Thur", 
       "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
  • 直方图,在图表的上方增加细条图
px.histogram(tips, x="total_bill", y="tip", color="sex", marginal="rug", 
             hover_data=tips.columns)
  • 直方图,在垂直(y)、水平(x)方向上,按指定的列,单独展示子图表,并为列值进行排序
px.histogram(tips, x="sex", y="tip", histfunc="avg", color="smoker", 
             barmode="group", facet_row="time", facet_col="day", 
             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], 
             "time": ["Lunch", "Dinner"]})
  • 长条图,设置方向为水平
px.strip(tips, x="total_bill", y="time", orientation="h", color="smoker")
  • 箱形图,设置使用槽口绘制框
px.box(tips, x="day", y="total_bill", color="smoker", notched=True)
  • 小提琴图,同时在内部显示箱图,展示所有采样数据
px.violin(tips, y="tip", x="smoker", color="sex", box=True, points="all", 
          hover_data=tips.columns)

3. 三元坐标

  • 三元散点图,为不同的列,指定具体的颜色
px.scatter_ternary(election, a="Joly", b="Coderre", c="Bergeron", color="winner", size="total", hover_name="district",
                   size_max=15, color_discrete_map = {"Joly": "blue", 
                   "Bergeron": "green", "Coderre":"red"} )
  • 三元线条图,设置短划线模式
px.line_ternary(election, a="Joly", b="Coderre", c="Bergeron", color="winner", 
                line_dash="winner")

4. 3D坐标

  • 三维散点图,设置不同的标记形状,并指定具体颜色
px.scatter_3d(election, x="Joly", y="Coderre", z="Bergeron", color="winner", 
              size="total", hover_name="district",symbol="result", 
              color_discrete_map = {"Joly": "blue", "Bergeron": "green", 
              "Coderre":"red"})

5. 极坐标

  • 极坐标散点图,指定颜色序列,沿极坐标中的角度轴定位标记
px.scatter_polar(wind, r="value", theta="direction", color="strength", 
            symbol="strength",color_discrete_sequence=px.colors.sequential.
            Plotly[-2::-1])
  • 极坐标线条图
px.line_polar(wind, r="value", theta="direction", color="strength", 
            line_close=True,color_discrete_sequence=px.colors.sequential.Plotly[-2::-1])
  • 极坐标条形图,设置图表背景颜色
px.bar_polar(wind, r="value", theta="direction", color="strength", template="plotly_dark",
            color_discrete_sequence= px.colors.sequential.Plotly[-2::-1])

6. 地图

  • 地理坐标散点图,设定滑动条,设定展示的地图类型:自然地图,即平面图
px.scatter_geo(gapminder, locations="iso_alpha", color="continent", hover_name="country", size="pop",
               animation_frame="year", projection="natural earth")
  • 地理坐标线条图,设定展示的地图类型:正交地图,即立体地图
px.line_geo(gapminder.query("year==2007"), locations="iso_alpha", 
            color="continent", projection="orthographic")
  • 等高(值)区域地图,设定滑动条,指定具体颜色序列范围
px.choropleth(gapminder, locations="iso_alpha", color="lifeExp", 
             hover_name="country", animation_frame="year",color_continuous_scale=px.colors.sequential.Plasma, range_color=[20,80])

六、 Plotly生态

  1. Plotly.py 已经发展成为一个非常强大的可视化交互工具,它可以让你控制图形的几乎每个方面,从图例的位置到刻度的长度。推出 Plotly Express 的主要目标是使 Plotly.py 更容易用于探索和快速迭代;

  2. 对于Plotly 生态系统,一旦使用 Plotly Express 创建了一个图形,就可以使用Themes,使用 FigureWidgets 进行命令性编辑,使用 Orca 将其导出为几乎任何文件格式,或者在 GUI JupyterLab 图表编辑器中编辑它;

  3. 主题(Themes)允许控制图形范围的设置,如边距、字体、背景颜色、刻度定位等,也可以使用模板参数,应用任何命名的主题或主题对象;

  4. Plotly_express 的输出,继承自 Plotly.py 的 Figure 类 ExpressFigure 的对象,这意味着可以使用任何 Figure 的访问器和方法,来改变 px 生成的图表,通常借助于 .update() 函数来调用;

  5. demo:对Plotly_express生成的图表,设置标记类型、坐标轴标签名称、坐标轴刻度倾斜角度、显示坐标轴线、坐标轴刻度间隔等;

  • 修改前--代码
# 选取2个国家:中国、阿富汗
country_list = ["China", "Afghanistan"]    
tem_gapminder = gapminder.query("country == @country_list")

fig = px.line(tem_gapminder, x="year", y="lifeExp", color="country", 
              width=1000, height=400, title="国家人均寿命", template="", 
              line_shape="spline", line_dash="country")
  • 修改前--图表
  • 修改后--代码
# 选取2个国家:中国、阿富汗
country_list = ["China", "Afghanistan"]    
tem_gapminder = gapminder.query("country == @country_list")

fig = px.line(tem_gapminder, x="year", y="lifeExp", color="country", 
              width=1000, height=400, title="国家人均寿命", template="", 
              line_shape="spline", line_dash="country")

# 修改时添加的代码
fig.update_traces(dict(mode="markers+lines"))
fig.update(layout=dict(xaxis=dict(title="年份", tickangle=-30, 
                       showline=True, nticks=20),
                       yaxis=dict(title="人均寿命", showline=True)))
  • 修改后--图表



Plotly Express 作为一个新的 Python 可视化库,在 Plotly 生态系统下,将会迅速发展,所以不要犹豫,立即开始使用 Plotly Express 吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容