Pygal指南--Python下一代数据可视化库

这篇文章是作为数据科学博客马拉松的一部分发表的。

在过去的十年中,我们在不同的数据可视化库中工作。数据可视化是通过将数据整理成更简单的情节来讲述故事,帮助我们理解和突出数据中的关键趋势。

简介

一个完善的数据可视化库允许你通过绘制交互式图表和处理你选择的数据集来突出有用的信息。你可以深入挖掘,浏览所有的洞察力,并将不同的图表和图画可视化。

然而,要体验数据可视化的实际好处并为你的项目选择最好的数据可视化,需要大量的研究和实践。这就是为什么我决定向你介绍Pygal。

今天的指南将向你介绍Pygal,它将解释Pygal的重要和有价值的功能。此外,它还会解释你为什么要使用Pygal,它的好处,以及与其他数据可视化库的比较,然后我们将动手在你的系统上实现和安装Pygal库。

然而,写这篇指南的动机是为了向广大受众解释开源社区和软件的惊人表现。我并不打算推广这个或不同的数据可视化库。因此,本指南将给你足够的知识来选择适合自己的最佳答案。

因此,让我们直接进入这个关于Pygal的教程。

什么是Pygal?

Pygal是一个开源的Python数据可视化库。它是最好的Python库之一,可以为不同的数据集创建高度互动的图和图表。

同时,它允许你以SVG(可扩展矢量图)或PNG(可移植图形格式)下载你的可视化资料,用于多种应用并进行相应的定制。

它可以下载Python 3.6, 3.7, 3.8, 3.9, 和 pypy,其Linux发行包适用于以下版本的Linux:。

Fedora

Gentoo

Ubuntu

Debian

Arch Linux

你可以下载它的主包,里面有所有可用的图表、配置类和地图扩展命名空间模块。

何时使用Pygal

Pygal是一个Python数据可视化库,它允许你用最少的编码工作来创建时尚和互动的Python图。

然而,如果你想知道在什么项目或场景下使用Pygal,那么如果你想在你的机器上打印出最佳分辨率的图,Pygal允许你以SVG、PNG、Etree、Base 64数据URI、Browser和PyQuery下载你的可视化图。

此外,你可以使用Pygal使用Flask App或Django响应来显示你的图,或者直接在你的HTML中参考其嵌入网页文档。

在处理复杂的数据集时,选择Pygal是因为它具有高度的可定制性,为你提供不同的图表(线图、条形图、柱状图、饼图、箱形图、点图等)、样式(内置样式、参数化样式等)、图表配置、序列配置、值配置(标签、样式、节点属性、链接)、火花线(火花文本等)、表格(样式、总数、转置)和输出格式。

Pygal的好处

你现在一定知道Pygal允许你创建漂亮的交互式图表,而且它是完全开源的库。现在,我们将强调一些最好的功能,使它们值得在你的项目中使用。

它有三个独立的地图包,以保持模块的体积小,便于用户使用。

它为大多数图形提供了互动性,为你提供了数据探索、过滤掉某些特征、放大/缩小等功能。

它通过丰富的支持和社区进行优化,使用户能够创建和使用SVG图像。

它通过提供三个主要概念--数据、布局和数字对象,让你有远见。使用这些概念,你可以轻松地解决多种复杂的可视化问题。

与市场上其他流行的Python数据可视化库的比较

互联网上有许多不同的可视化库。Matplotlib以其强大的功能而闻名,Seaborn以其易用性而闻名,Bokeh以其互动性而闻名,Plotly以其协作性而闻名,等等。

同样,Pygal也因其对SVG图像的支持而闻名。然而,让我们比较一下Pygal和其他库,了解为什么大多数数据科学家仍然喜欢其他库而不是Pygal。

Pygal

Github链接:https://github.com/Kozea/pygal

Github星级: 2.4K

Github关注者 136

Github Forks: 398

Github贡献者 62

代码质量 L2

编程语言。Python

Matplotlib

Github链接: https://github.com/matplotlib/matplotlib

Github星级: 15.2K

Github关注者。573

Github Forks: 6.3K

Github贡献者。1143

代码质量。L3

编程语言 Python

Seaborn

Github链接: https://github.com/mwaskom/seaborn

Github星级: 9.2K

Github关注者: 248

Github Forks: 1.6K

Github贡献者。148

代码质量。L2

编程语言。Python

绘图

Github链接: https://github.com/plo

实现(安装,不同的方法和函数)与一个示例代码
在了解了Pygal库和它的优点之后,我们看到了它与其他可视化库的比较。我们已经准备好去探索所有的实用功能,并在你的项目中实现Pygal。
打开jupyter笔记本,开始编写代码。

pip install pygal 
import pygal

上面的命令将在你的机器上安装pygal库。
注意:我想感谢Pygal文档的维护。本综合指南中使用的所有代码都来自其官方页面上的官方文档。
现在我们将看到pygal库所提供的不同风格的绘图。

  1. 线形图
    通过pygal自带的不同的线型图,绘制它们是非常简单和容易的。
    你首先要导入pygal库,然后创建一个图表类型的对象。例如,在一个简单的线形图中,你使用pygal.Line()或者pygal对于一个水平线pygal.HorizontalLine()。
    让我们看看下面不同类型的线图。
image.png
Line_Chart = pygal.Line() 
Line_Chart.title = ' Line Chart' 
Line_Chart.x_labels = map(str, range(2005, 2016)) 
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Line_Chart.render_to_file('Line_Chart.svg')

image.png

Line_Chart = pygal.HorizontalLine() 
Line_Chart.title = 'Horizontal Line Bar' 
Line_Chart.x_labels = map(str, range(20005, 2016)) 
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Line_Chart.range = [0, 100] 
Line_Chart.render_to_file('Line_Chart_hori.svg')
image.png
Line_Chart = pygal.StackedLine(fill=True) 
Line_Chart.title = 'Stacked line Chart' 
Line_Chart.x_labels = map(str, range(2005, 2016)) 
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Line_Chart.render_to_file('Line_Chart_stack.svg')
  1. 条形图
    通过pygal自带的不同的条形图,可以很简单地绘制它们。
    你首先要导入pygal库,然后创建一个图表类型的对象。例如,在一个简单的条形图中,你使用 pygal. Bar(),或者对于一个水平条形图使用pygal.HorizontalLine()。
    让我们看看下面不同类型的条形图。
image.png
Bar_Chart = pygal.Bar() 
Bar_Chart.title = ' Bar Graph ' 
Bar_Chart.x_labels = map(str, range(2005, 2016)) 
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Bar_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Bar_Chart.render_to_file('Bar_Chart.svg')

image.png
Bar_Chart = pygal.HorizontalBar() 
Bar_Chart.title = 'Horizontal Bar Graph' 
Bar_Chart.x_labels = map(str, range(2005, 2016)) 
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Bar_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Bar_Chart.render_to_file('Bar_Chart_hori.svg')

image.png
Bar_Chart = pygal.StackedBar() 
Bar_Chart.title = 'Stacked bar Graph' 
Bar_Chart.x_labels = map(str, range(2006, 2017)) 
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11]) 
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2]) 
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4]) 
Bar_Chart.add('Others', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4]) 
Bar_Chart.render_to_file('Bar_Chart_stack.svg')
  1. 柱状图
    接下来,我们有一个独特的柱状图类型,需要3个参数,名为Histogram。它需要高度、X-开始和X-结束作为参数。让我们在下面绘制一个简单的直方图。
image.png
Hist = pygal.Histogram() 
Hist.add('Wide bars', [(6, 1, 11), (5, 6, 13), (3, 1, 16)]) 
Hist.add('Narrow bars', [(11, 2, 3), (13, 5, 5.6), (9, 12, 14)]) 
Hist.render_to_file('Histogram.svg')

  1. XY
    你可以在内置方法的帮助下在XY平面上设计一个图表。让我们在下面绘制余弦图。
image.png
from math import cos  
XY_chart = pygal.XY()  
XY_chart.title = 'XY Chart'  
XY_chart.add('x = cos(y)', [(cos(x / 20.), x / 20.) for x in range(-40, 40, 4)])  
XY_chart.add('y = cos(x)', [(x / 20., cos(x / 20.)) for x in range(-40, 40, 4)])  
XY_chart.add('x = 1', [(2, -4), (2, 4)])  
XY_chart.add('x = -1', [(-1, -4), (-1, 4)])  
XY_chart.add('y = 1', [(-4, 1), (4, 1)])  
XY_chart.add('y = -1', [(-4, -1), (4, -1)])

对于散点图,在XY对象中禁用描边。

image.png
XY_chart = pygal.XY(stroke=False)  
XY_chart.title = 'XY Scatter Plot'  
XY_chart.add('A', [(0, 0), (.2, .3), (.5, .3), (.6, 2), (.8, .6), (1, 1.01), (1.4, 1.3), (2, 3.26), (2.44, 2.1)])  
XY_chart.add('B', [(.1, .14), (.11, .22), (.4, .4), (.6, .4), (.22, .22), (.4, .3), (.7, .8), (.7, .8)])  
XY_chart.add('C', [(.06, .02), (.12, .01), (1.6, 1.8), (1.63, 1.7), (1.8, 1.62), (1.5, 1.83), (1.7, 1.24), (2.1, 2.22), (2.19, 1.99)])  
XY_chart.render_to_file('xy_scatter.svg')

  1. 饼图
    pygal中不同类型的饼图有半饼图、甜甜圈图或多系列饼图。
    让我们在下面实现一些。
image.png
Pie_Chart = pygal.Pie() 
Pie_Chart.title = 'PIE Chart' 
Pie_Chart.add('C', 19.1) 
Pie_Chart.add('A', 36.1) 
Pie_Chart.add('B', 36.2) 
Pie_Chart.add('D', 4.4) 
Pie_Chart.add('E', 2.5) 
Pie_Chart.render_to_file('PC.svg')
image.png
Pie_Chart = pygal.Pie(inner_radius=.4) 
Pie_Chart.title = 'PIE Chart :Donut' 
Pie_Chart.add('C', 19.1) 
Pie_Chart.add('A', 36.1) 
Pie_Chart.add('B', 36.2) 
Pie_Chart.add('D', 4.4) 
Pie_Chart.add('E', 2.5) 
Pie_Chart.render_to_file('PC_Donut.svg')
image.png
Pie_Chart = pygal.Pie(half_pie=True) 
Pie_Chart.title = 'PIE Chart: Half Donut' 
Pie_Chart.add('C', 19.1) 
Pie_Chart.add('A', 36.1) 
Pie_Chart.add('B', 36.2) 
Pie_Chart.add('D', 4.4) 
Pie_Chart.add('E', 2.5) 
Pie_Chart.render_to_file('HALF-PC_Donut.svg')

  1. 雷达图
    雷达图对于比较两组或多组类的多个特征或特性来说是非常出色的,Pygal为你提供了绘制Kiviat图的选项,非常方便。让我们在下面绘制一个简单的雷达图。
image.png
Radar_Chart = pygal.Radar() 
Radar_Chart.title = 'Radar' 
Radar_Chart.x_labels = ['R', 'D', 'C', 'X', 'E', 'H', 'S', 'N'] 
Radar_Chart.add('B', [6392, 8211, 7521, 7228, 12434, 1640, 2143, 8637]) 
Radar_Chart.add('A', [7474, 8089, 11701, 2631, 6351, 1042, 3697, 9410]) 
Radar_Chart.add('D', [3471, 2932, 4103, 5219, 5811, 1818, 9011, 4668]) 
Radar_Chart.add('C', [41, 42, 58, 78, 143, 126, 31, 132]) 
Radar_Chart.render_to_file('Radar.svg')
  1. 箱形图
    盒形图可以让你对基于五个因素的数据分布有一个高层次的认识:最小值、最大值、中位数、第一四分位数(Q1)和第三四分位数(Q3)。在pygal中,默认情况下,你可以绘制一个以晶须为数据集极值的箱形图,箱形图从Q1到Q3,中间的线代表给定特征的中值。
    让我们绘制一个简单的箱形图。
image.png
Box_Plot = pygal.Box() 
Box_Plot.title = 'Box Chart' 
Box_Plot.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617]) 
Box_Plot.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440]) 
Box_Plot.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662]) 
Box_Plot.add('C', [45, 42, 56, 73, 142, 131, 31, 101]) 
Box_Plot.render_to_file('Box.svg')

Pygal有选项可以根据给定特征的标准差来改变feature


image.png
Box_Plot = pygal.Box(box_mode="stdev") 
Box_Plot.title = 'STD. Deviation Box Chart' 
Box_Plot.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617]) 
Box_Plot.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440]) 
Box_Plot.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662]) 
Box_Plot.add('C', [45, 42, 56, 73, 142, 131, 31, 101]) 
Box_Plot.render_to_file('Box_stdDev.svg')
  1. 点状图
    一个简单的点状图或条状图由在图表上绘制成点状的数据点组成。它对于检查特定的数据趋势或聚类模式很有帮助。Pygal为你提供了在正反两方面的数据点上绘制类似打卡的图表的选项。
    下面让我们绘制一个简单的点图。
image.png
Dot_Chart = pygal.Dot(x_label_rotation=35) 
Dot_Chart.title = 'Dot Chart' 
Dot_Chart.x_labels = ['Ri', 'De', 'Cr', 'Ra', 'Ea', 'Re', 'Sp', 'Na'] 
Dot_Chart.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617]) 
Dot_Chart.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440]) 
Dot_Chart.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662]) 
Dot_Chart.add('C', [45, 42, 56, 73, 142, 131, 31, 101]) 
Dot_Chart.render_to_file('Dot.svg')
image.png
Dot_Chart = pygal.Dot(x_label_rotation=35) 
Dot_Chart.add('Normal', [11, 51, 75, 86, 24]) 
Dot_Chart.add('With negatives', [0, -35, -21, 32, -72]) 
Dot_Chart.render_to_file('Dot_Negative.svg')
  1. 漏斗图
    漏斗图是表示任何会议或过程的阶段的一种很好的方式。Pygal可以帮助你最容易地绘制一个漏斗图。让我们看看如何绘制一个简单的漏斗图。
image.png
Funnel_Chart = pygal.Funnel() 
Funnel_Chart.title = 'Funnel Chart' 
Funnel_Chart.x_labels = ['Ri', 'De', 'Cr', 'Ra', 'Ea', 'Re', 'Sp', 'Na'] 
Funnel_Chart.add('Opera', [3478, 2833, 4233, 5329, 5910, 1838, 9023, 4679]) 
Funnel_Chart.add('A', [7471, 8091, 11701, 2641, 6362, 1042, 3787, 9440]) 
Funnel_Chart.add('B', [6391, 8211, 7521, 7211, 12463, 1661, 2124, 8609]) 
Funnel_Chart.render_to_file('Funnel.svg')

  1. 实体仪表盘
    实体仪表盘图是最受欢迎的角度仪表盘图,用于现实世界的仪表盘或仪表盘,因为它们可以将一个范围内的数字可视化,一目了然。
    下面让我们用Pygal绘制一个简单的SolidGauge图。
image.png
Gauge = pygal.SolidGauge(inner_radius=0.75) 
per_format = lambda x: '{:.10g}%'.format(x) 
dol_format = lambda x: '{:.10g}$'.format(x) 
Gauge.value_formatter = per_format 
Gauge.add('Series A', [{'value': 226000, 'max_value': 1276000}], 
formatter= dol_format) 
Gauge.add('Series B', [{'value': 160, 'max_value': 150}]) 
Gauge.add('Series C', [{'value': 5}]) 
Gauge.add( 
'Series D', [ 
{'value': 52, 'max_value': 150}, 
{'value': 14, 'max_value': 150}]) 
Gauge.add('Series E', [{'value': 69, 'max_value': 150}]) 
Gauge.add('Series F', 95) 
Gauge.add('Series G', [{'value': 150, 'max_value': 150}]) 
Gauge.render_to_file('SolidGauge.svg')
  1. 仪表盘
    Gauge图是一种最常用于具有定量背景的单一数据值的图,它跟踪KPI的进展。
    下面让我们用Pygal绘制一个简单的Gauge图。
image.png
Gauge_chart = pygal.Gauge(human_readable=True) 
Gauge_chart.title = 'Gauge Plot' 
Gauge_chart.range = [0, 15000] 
Gauge_chart.add('X', 8219) 
Gauge_chart.add('Y', 8091) 
Gauge_chart.add('Z', 2953) 
Gauge_chart.add('V', 42) 
Gauge_chart.render_to_file('Gauge.svg')
  1. 树状图
    树状图是一个重要的图表,它提供了一个分层的数据视图,经常显示销售数据。
    下面让我们用Pygal绘制一个简单的Treemap。
image.png
Treemap = pygal.Treemap() 
Treemap.title = 'Treemap Plot' 
Treemap.add('X', [1, 2, 11, 3, 2, 2, 1, 2, 11, 2 , 3, None, 8]) 
Treemap.add('Y', [5, 3, 6, 11, 4, 5, 3, 8, 5, -11, None, 9, 4, 2]) 
Treemap.add('Z', [4, 9, 4, 4, 6, 4, 4, 6, 5, 13]) 
Treemap.add('Q', [24, 19]) 
Treemap.add('E', [2, 1, 2, 1, 4, 4, 2, 1, 4, 
3, 4, 2, 1, 2, 2, 2, 2, 2]) 
Treemap.add('A', [21]) 
Treemap.add('B', [5, 9.2, 8.2, 11, 3, 4, 1]) 
Treemap.add('C', [11, 2, 2]) 
Treemap.render_to_file('Treemap.svg')
  1. 地图
    地图显示的是不同地区或国家之间的符号表示和关系。Pygal提供了绘制世界地图、法国地图和瑞士地图的选项。为了保持pygal包的小体积,这些地图现在被单独打包了,下面是根据你的项目安装和配置它们的链接。
    https://www.pygal.org/en/stable/documentation/types/maps/index.html

一些额外的功能
除了不同风格的图表之外,它还提供了一些额外的功能,我们将在下面讨论。
然而,每个功能的实现都不在本指南的范围之内。因此,建议查看官方文档页面。
样式。

Pygal为用户提供了不同的选项来设计他们的图形和图表。有内置的样式来改变图表的颜色模式,如霓虹灯、红色、蓝色、绿松石、深绿色、浅日光色等。你也可以导入自定义的CSS样式,在你的图表中使用。
图表配置。它还为你提供了改变图表配置的选项,如改变标题、X-标签、Y-标签、大小、图例、轴、数据等等。

嵌入到网页中。它提供了为你保存的SVG图表设置URL条目的选项,以便在你的HTML代码中放入标签。

总结
在本指南中,我们讨论了一个开源的数据可视化库,Pygal。我们已经看到了可以实现的不同类型的图表。此外,本指南还解释了必须知道的功能以及与其他基于Python的数据可视化库的比较。我希望所强调的Pygal数据可视化库的好处和重要性是明确的,以帮助你做出决定。

现在,我很想看看你们这些人将如何在你们的项目中使用Pygal。如果你今天学到了有价值的东西,别忘了点赞、分享和评论。

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

推荐阅读更多精彩内容