Matplotlib 中文用戶指南 3.5 藝術(shù)家教程

藝術(shù)家教程

原文:Artist tutorial

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

matplotlib API 有三個層級。 matplotlib.backend_bases.FigureCanvas是繪制圖形的區(qū)域,matplotlib.backend_bases.Renderer是知道如何在ChartCanvas上繪制的對象,而matplotlib.artist.Artist是知道如何使用渲染器在畫布上畫圖的對象。 FigureCanvasRenderer處理與用戶界面工具包(如 wxPython)或 PostScript? 等繪圖語言交互的所有細(xì)節(jié),Artist處理所有高級結(jié)構(gòu),如表示和布局圖形,文本和線條。用戶通常要花費(fèi)95%的時間來處理藝術(shù)家。

有兩種類型的藝術(shù)家:基本類型和容器類型。基本類型表示我們想要繪制到畫布上的標(biāo)準(zhǔn)圖形對象:Line2DRectangleTextAxesImage等,容器是放置它們的位置(AxisAxesFigure)。標(biāo)準(zhǔn)用法是創(chuàng)建一個Figure實例,使用Figure創(chuàng)建一個或多個AxesSubplot實例,并使用Axes實例的輔助方法來創(chuàng)建基本類型。在下面的示例中,我們使用matplotlib.pyplot.figure()創(chuàng)建一個Figure實例,這是一個便捷的方法,用于實例化Figure實例并將它們與你的用戶界面或繪圖工具包FigureCanvas連接。正如我們將在下面討論的,這不是必須的 - 你可以直接使用 PostScript,PDF,Gtk+ 或 wxPython FigureCanvas實例,直接實例化你的圖形并連接它們 - 但是因為我們在這里關(guān)注藝術(shù)家 API,我們讓pyplot為我們處理一些細(xì)節(jié):

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2,1,1) # two rows, one column, first plot

Axes可能是 matplotlib API 中最重要的類,你將在大多數(shù)時間使用它。 這是因為Axes是大多數(shù)對象所進(jìn)入的繪圖區(qū)域,Axes有許多特殊的輔助方法(plot()text()hist()imshow())來創(chuàng)建最常見的圖形基本類型 Line2DTextRectangleImage)。 這些輔助方法將獲取你的數(shù)據(jù)(例如 numpy 數(shù)組和字符串),并根據(jù)需要創(chuàng)建基本Artist實例(例如,Line2D),將它們添加到相關(guān)容器中,并在請求時繪制它們。 大多數(shù)人可能熟悉子圖,這只是Axes的一個特例,它存在于Subplot實例的列網(wǎng)格的固定行上。 如果要在任意位置創(chuàng)建Axes,只需使用add_axes()方法,該方法接受[left, bottom, width, height]值的列表,以 0~1 的圖形相對坐標(biāo)為單位:

fig2 = plt.figure()
ax2 = fig2.add_axes([0.15, 0.1, 0.7, 0.3])

以我們的例子繼續(xù):

import numpy as np
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)

在這個例子中,ax是上面的fig.add_subplot調(diào)用創(chuàng)建的Axes實例(記住Subplot只是Axes的一個子類),當(dāng)你調(diào)用ax.plot時,它創(chuàng)建一個Line2D實例并將其添加到Axes.lines列表中。 在下面的 ipython 交互式會話中,你可以看到Axes.lines列表的長度為 1,并且包含由line, = ax.plot...調(diào)用返回的相同線條:

In [101]: ax.lines[0]
Out[101]: <matplotlib.lines.Line2D instance at 0x19a95710>

In [102]: line
Out[102]: <matplotlib.lines.Line2D instance at 0x19a95710>

如果你對ax.plot進(jìn)行連續(xù)調(diào)用(并且保持狀態(tài)為『on』,這是默認(rèn)值),則將在列表中添加其他線條。 你可以稍后通過調(diào)用列表方法刪除線條;任何一個方法都可以:

del ax.lines[0]
ax.lines.remove(line)  # one or the other, not both!

軸域也擁有輔助方法,用于設(shè)置和裝飾 x 和 y 軸的刻度、刻度標(biāo)簽和軸標(biāo)簽:

xtext = ax.set_xlabel('my xdata') # returns a Text instance
ytext = ax.set_ylabel('my ydata')

當(dāng)你調(diào)用ax.set_xlabel時,它將信息傳遞給XAxisText實例,每個Axes實例都包含XAxisYAxis,它們處理刻度、刻度標(biāo)簽和軸標(biāo)簽的布局和繪制。

嘗試創(chuàng)建下面的圖形:

自定義你的對象

圖中的每個元素都由一個 matplotlib 藝術(shù)家表示,每個元素都有一個擴(kuò)展屬性列表用于配置它的外觀。 圖形本身包含一個Rectangle,正好是圖形的大小,你可以使用它來設(shè)置圖形的背景顏色和透明度。 同樣,每個Axes邊框(在通常的 matplotlib 繪圖中是標(biāo)準(zhǔn)的白底黑邊)擁有一個Rectangle實例,用于確定軸域的顏色,透明度和其他屬性,這些實例存儲為成員變量Figure.patchAxes.patch(『Patch』是一個繼承自 MATLAB 的名稱,它是圖形上的一個顏色的 2D『補(bǔ)丁』,例如矩形,圓和多邊形)。每個 matplotlib 藝術(shù)家都有以下屬性。

屬性 描述
alpha 透明度 - 0 ~ 1 的標(biāo)量
animated 用于幫助動畫繪制的布爾值
axes 藝術(shù)家所在的軸域,可能為空
clip_box 用于剪切藝術(shù)家的邊框
clip_on 剪切是否開啟
clip_path 藝術(shù)家被剪切的路徑
contains 一個拾取函數(shù),用于判斷藝術(shù)家是否位于拾取點
figure 藝術(shù)家所在的圖形實例,可能為空
label 文本標(biāo)簽(用于自動標(biāo)記)
picker 控制對象拾取的 Python 對象
transform 變換
visible 布爾值,表示藝術(shù)家是否應(yīng)該繪制
zorder 確定繪制順序的數(shù)值
rasterized 布爾值,是否將向量轉(zhuǎn)換為光柵圖形(出于壓縮或 eps 透明度)

每個屬性都使用一個老式的settergetter(是的,我們知道這會刺激 Python 愛好者,我們計劃支持通過屬性或 traits 直接訪問,但它還沒有完成)。 例如,要將當(dāng)前alpha值變?yōu)橐话耄?/p>

a = o.get_alpha()
o.set_alpha(0.5*a)

如果你打算可以一次性設(shè)置一些屬性,你也可以以關(guān)鍵字參數(shù)使用set方法,例如:

o.set(alpha=0.5, zorder=2)

如果你在 Python 交互式 Shell 中工作,檢查Artist屬性的一種方便的方法是使用matplotlib.artist.getp()函數(shù)(在 pylab 中只需要getp()),它列出了屬性及其值。 這適用于從Artist派生的類,例如FigureRectangle。 這里是上面提到的Figure的矩形屬性:

In [149]: matplotlib.artist.getp(fig.patch)
    alpha = 1.0
    animated = False
    antialiased or aa = True
    axes = None
    clip_box = None
    clip_on = False
    clip_path = None
    contains = None
    edgecolor or ec = w
    facecolor or fc = 0.75
    figure = Figure(8.125x6.125)
    fill = 1
    hatch = None
    height = 1
    label =
    linewidth or lw = 1.0
    picker = None
    transform = <Affine object at 0x134cca84>
    verts = ((0, 0), (0, 1), (1, 1), (1, 0))
    visible = True
    width = 1
    window_extent = <Bbox object at 0x134acbcc>
    x = 0
    y = 0
    zorder = 1

所有類的文檔字符串也包含Artist屬性,因此你可以查閱交互式『幫助』或 Artist模塊,來獲取給定對象的屬性列表。

對象容器

現(xiàn)在我們知道如何檢查和設(shè)置我們想要配置的給定對象的屬性,現(xiàn)在我們需要如何獲取該對象。 前面提到了兩種對象:基本類型和容器類型。 基本類型通常是你想要配置的東西(Text實例的字體,Line2D的寬度),雖然容器也有一些屬性 - 例如 Axes是一個容器藝術(shù)家,包含你的繪圖中的許多基本類型,但它也有屬性,比如xscale來控制xaxis是『線性』還是『對數(shù)』。 在本節(jié)中,我們將回顧各種容器對象存儲你想要訪問的藝術(shù)家的位置。

圖形容器

頂層容器藝術(shù)家是matplotlib.figure.Figure,它包含圖形中的所有內(nèi)容。 圖形的背景是一個Rectangle,存儲在Figure.patch中。 當(dāng)你向圖形中添加子圖(add_subplot())和軸域(add_axes())時,這些會附加到Figure.axes。 它們也由創(chuàng)建它們的方法返回:

In [156]: fig = plt.figure()

In [157]: ax1 = fig.add_subplot(211)

In [158]: ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])

In [159]: ax1
Out[159]: <matplotlib.axes.Subplot instance at 0xd54b26c>

In [160]: print fig.axes
[<matplotlib.axes.Subplot instance at 0xd54b26c>, <matplotlib.axes.Axes instance at 0xd3f0b2c>]

因為圖形維護(hù)了『當(dāng)前軸域』(見figure.gca和圖figure.sca)的概念以支持 pylab/pyplot 狀態(tài)機(jī),所以不應(yīng)直接從軸域列表中插入或刪除軸域,而應(yīng)使用add_subplot()add_axes()方法進(jìn)行插入,并使用delaxes()方法進(jìn)行刪除。 然而,你可以自由地遍歷軸域列表或索引,來訪問要自定義的Axes實例。 下面是一個打開所有軸域網(wǎng)格的示例:

for ax in fig.axes:
    ax.grid(True)

圖形還擁有自己的文本,線條,補(bǔ)丁和圖像,你可以使用它們直接添加基本類型。 圖形的默認(rèn)坐標(biāo)系統(tǒng)簡單地以像素(這通常不是你想要的)為單位,但你可以通過設(shè)置你添加到圖中的藝術(shù)家的transform屬性來控制它。

更有用的是『圖形坐標(biāo)系』,其中(0,0)是圖的左下角,(1,1)是圖的右上角,你可以通過將Artist的變換設(shè)置為fig.transFigure來獲得:

In [191]: fig = plt.figure()

In [192]: l1 = matplotlib.lines.Line2D([0, 1], [0, 1],
           transform=fig.transFigure, figure=fig)

In [193]: l2 = matplotlib.lines.Line2D([0, 1], [1, 0],
           transform=fig.transFigure, figure=fig)

In [194]: fig.lines.extend([l1, l2])

In [195]: fig.canvas.draw()

這里是圖形可以包含的藝術(shù)家總結(jié):

圖形屬性 描述
axes Axes實例的列表(包括Subplot
patch Rectangle背景
images FigureImages補(bǔ)丁的列表 - 用于原始像素顯示
legends 圖形Legend實例的列表(不同于Axes.legends
lines 圖形Line2D實例的列表(很少使用,見Axes.lines
patches 圖形補(bǔ)丁列表(很少使用,見Axes.patches
texts 圖形Text實例的列表

軸域容器

matplotlib.axes.Axes是 matplotlib 宇宙的中心 - 它包含絕大多數(shù)在一個圖形中使用的藝術(shù)家,并帶有許多輔助方法來創(chuàng)建和添加這些藝術(shù)家本身,以及訪問和自定義所包含的藝術(shù)家的輔助方法。 就像Figure那樣,它包含一個Patch patch,它是一個用于笛卡爾坐標(biāo)的Rectangle和一個用于極坐標(biāo)的Cirecle; 這個補(bǔ)丁決定了繪圖區(qū)域的形狀,背景和邊框:

ax = fig.add_subplot(111)
rect = ax.patch  # a Rectangle instance
rect.set_facecolor('green')

當(dāng)調(diào)用繪圖方法(例如通常是plot())并傳遞數(shù)組或值列表時,該方法將創(chuàng)建一個matplotlib.lines.Line2D()實例,將所有Line2D屬性作為關(guān)鍵字參數(shù)傳遞, 將該線條添加到Axes.lines容器,并將其返回給你:

In [213]: x, y = np.random.rand(2, 100)

In [214]: line, = ax.plot(x, y, '-', color='blue', linewidth=2)

plot返回一個線條列表,因為你可以傳入多個x,y偶對來繪制,我們將長度為一的列表的第一個元素解構(gòu)到line變量中。 該線條已添加到Axes.lines列表中:

In [229]: print ax.lines
[<matplotlib.lines.Line2D instance at 0xd378b0c>]

與之類似,創(chuàng)建補(bǔ)丁的方法(如bar())會創(chuàng)建一個矩形列表,將補(bǔ)丁添加到Axes.patches列表中:

In [233]: n, bins, rectangles = ax.hist(np.random.randn(1000), 50, facecolor='yellow')

In [234]: rectangles
Out[234]: <a list of 50 Patch objects>

In [235]: print len(ax.patches)

你不應(yīng)該直接將對象添加到Axes.linesAxes.patches列表,除非你確切知道你在做什么,因為Axes需要在它創(chuàng)建和添加對象做一些事情。 它設(shè)置Artistfigureaxes屬性,以及默認(rèn)Axes變換(除非設(shè)置了變換)。 它還檢查Artist中包含的數(shù)據(jù),來更新控制自動縮放的數(shù)據(jù)結(jié)構(gòu),以便可以調(diào)整視圖限制來包含繪制的數(shù)據(jù)。 但是,你可以自己創(chuàng)建對象,并使用輔助方法(如add_line()add_patch())將它們直接添加到Axes。 這里是一個注釋的交互式會話,說明正在發(fā)生什么:

In [261]: fig = plt.figure()

In [262]: ax = fig.add_subplot(111)

# create a rectangle instance
In [263]: rect = matplotlib.patches.Rectangle( (1,1), width=5, height=12)

# by default the axes instance is None
In [264]: print rect.get_axes()
None

# and the transformation instance is set to the "identity transform"
In [265]: print rect.get_transform()
<Affine object at 0x13695544>

# now we add the Rectangle to the Axes
In [266]: ax.add_patch(rect)

# and notice that the ax.add_patch method has set the axes
# instance
In [267]: print rect.get_axes()
Axes(0.125,0.1;0.775x0.8)

# and the transformation has been set too
In [268]: print rect.get_transform()
<Affine object at 0x15009ca4>

# the default axes transformation is ax.transData
In [269]: print ax.transData
<Affine object at 0x15009ca4>

# notice that the xlimits of the Axes have not been changed
In [270]: print ax.get_xlim()
(0.0, 1.0)

# but the data limits have been updated to encompass the rectangle
In [271]: print ax.dataLim.bounds
(1.0, 1.0, 5.0, 12.0)

# we can manually invoke the auto-scaling machinery
In [272]: ax.autoscale_view()

# and now the xlim are updated to encompass the rectangle
In [273]: print ax.get_xlim()
(1.0, 6.0)

# we have to manually force a figure draw
In [274]: ax.figure.canvas.draw()

有非常多的Axes輔助方法用于創(chuàng)建基本藝術(shù)家并將它們添加到他們各自的容器中。 下表總結(jié)了他們的一部分,他們創(chuàng)造的Artist的種類,以及他們在哪里存儲它們。

輔助方法 藝術(shù)家 容器
ax.annotate - 文本標(biāo)注 Annotate ax.texts
ax.bar - 條形圖 Rectangle ax.patches
ax.errorbar - 誤差條形圖 Line2DRectangle ax.linesax.patches
ax.fill - 共享區(qū)域 Polygon ax.patches
ax.hist - 直方圖 Rectangle ax.patches
ax.imshow - 圖像數(shù)據(jù) AxesImage ax.images
ax.legend - 軸域圖例 Legend ax.legends
ax.plot - xy 繪圖 Line2D ax.lines
ax.scatter - 散點圖 PolygonCollection ax.collections
ax.text - 文本 Text ax.texts

除了所有這些藝術(shù)家,Axes包含兩個重要的藝術(shù)家容器:XAxisYAxis,它們處理刻度和標(biāo)簽的繪制。 它們被存儲為實例變量xaxisyaxisXAxisYAxis容器將在下面詳細(xì)介紹,但請注意,Axes包含許多輔助方法,它們會將調(diào)用轉(zhuǎn)發(fā)給Axis實例,因此你通常不需要直接使用它們,除非你愿意。 例如,你可以使用Axes輔助程序方法設(shè)置XAxis刻度標(biāo)簽的字體大小:

for label in ax.get_xticklabels():
    label.set_color('orange')

下面是軸域所包含的藝術(shù)家的總結(jié)

軸域?qū)傩?/th> 描述
artists Artist實例的列表
patch 用于軸域背景的Rectangle實例
collections Collection實例的列表
images AxesImage的列表
legends Legend實例的列表
lines Line2D實例的列表
patches Patch實例的列表
texts Text實例的列表
xaxis matplotlib.axis.XAxis實例
yaxis matplotlib.axis.YAxis實例

軸容器

matplotlib.axis.Axis實例處理刻度線,網(wǎng)格線,刻度標(biāo)簽和軸標(biāo)簽的繪制。你可以分別為y軸配置左和右刻度,為x軸分別配置上和下刻度。 Axis還存儲在自動縮放,平移和縮放中使用的數(shù)據(jù)和視圖間隔,以及LocatorFormatter實例,它們控制刻度位置以及它們表示為字符串的方式。

每個Axis對象都包含一個label屬性(這是 pylab 在調(diào)用xlabel()ylabel()時修改的東西)以及主和次刻度的列表。刻度是XTickYTick實例,它包含渲染刻度和刻度標(biāo)簽的實際線條和文本基本類型。因為刻度是按需動態(tài)創(chuàng)建的(例如,當(dāng)平移和縮放時),你應(yīng)該通過訪問器方法get_major_ticks()get_minor_ticks()訪問主和次刻度的列表。雖然刻度包含所有下面要提及的基本類型,Axis方法包含訪問器方法來返回刻度線,刻度標(biāo)簽,刻度位置等:

In [285]: axis = ax.xaxis

In [286]: axis.get_ticklocs()
Out[286]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

In [287]: axis.get_ticklabels()
Out[287]: <a list of 10 Text major ticklabel objects>

# note there are twice as many ticklines as labels because by
#  default there are tick lines at the top and bottom but only tick
#  labels below the xaxis; this can be customized
In [288]: axis.get_ticklines()
Out[288]: <a list of 20 Line2D ticklines objects>

# by default you get the major ticks back
In [291]: axis.get_ticklines()
Out[291]: <a list of 20 Line2D ticklines objects>

# but you can also ask for the minor ticks
In [292]: axis.get_ticklines(minor=True)
Out[292]: <a list of 0 Line2D ticklines objects>

下面是Axis的一些有用的訪問器方法的總結(jié)(它們擁有相應(yīng)的setter,如set_major_formatter)。

訪問器方法 描述
get_scale 軸的比例,例如'log''linear'
get_view_interval 軸視圖范圍的內(nèi)部實例
get_data_interval 軸數(shù)據(jù)范圍的內(nèi)部實例
get_gridlines 軸的網(wǎng)格線列表
get_label 軸標(biāo)簽 - Text實例
get_ticklabels Text實例的列表 - 關(guān)鍵字`minor=True False`
get_ticklines Line2D實例的列表 - 關(guān)鍵字`minor=True False`
get_ticklocs Tick位置的列表 - 關(guān)鍵字`minor=True False`
get_major_locator 用于主刻度的matplotlib.ticker.Locator實例
get_major_formatter 用于主刻度的matplotlib.ticker.Formatter實例
get_minor_locator 用于次刻度的matplotlib.ticker.Locator實例
get_minor_formatter 用于次刻度的matplotlib.ticker.Formatter實例
get_major_ticks 用于主刻度的Tick實例列表
get_minor_ticks 用于次刻度的Tick實例列表
grid 為主或次刻度打開或關(guān)閉網(wǎng)格

這里是個例子,出于美觀不太推薦,它自定義了軸域和刻度屬性。

import numpy as np
import matplotlib.pyplot as plt

# plt.figure creates a matplotlib.figure.Figure instance
fig = plt.figure()
rect = fig.patch # a rectangle instance
rect.set_facecolor('lightgoldenrodyellow')

ax1 = fig.add_axes([0.1, 0.3, 0.4, 0.4])
rect = ax1.patch
rect.set_facecolor('lightslategray')


for label in ax1.xaxis.get_ticklabels():
    # label is a Text instance
    label.set_color('red')
    label.set_rotation(45)
    label.set_fontsize(16)

for line in ax1.yaxis.get_ticklines():
    # line is a Line2D instance
    line.set_color('green')
    line.set_markersize(25)
    line.set_markeredgewidth(3)

plt.show()

刻度容器

matplotlib.axis.Tick是我們從FigureAxes再到Axis再到Tick的最終的容器對象。Tick包含刻度和網(wǎng)格線的實例,以及上側(cè)和下側(cè)刻度的標(biāo)簽實例。 每個都可以直接作為Tick的屬性訪問。此外,也有用于確定上標(biāo)簽和刻度是否對應(yīng)x軸,以及右標(biāo)簽和刻度是否對應(yīng)y軸的布爾變量。

刻度屬性 描述
tick1line Line2D實例
tick2line Line2D實例
gridline Line2D實例
label1 Text實例
label2 Text實例
gridOn 確定是否繪制刻度線的布爾值
tick1On 確定是否繪制主刻度線的布爾值
tick2On 確定是否繪制次刻度線的布爾值
label1On 確定是否繪制主刻度標(biāo)簽的布爾值
label2On 確定是否繪制次刻度標(biāo)簽的布爾值

這里是個例子,使用美元符號設(shè)置右側(cè)刻度,并在y軸右側(cè)將它們設(shè)成綠色。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

# Fixing random state for reproducibility
np.random.seed(19680801)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(100*np.random.rand(20))

formatter = ticker.FormatStrFormatter('$%1.2f')
ax.yaxis.set_major_formatter(formatter)

for tick in ax.yaxis.get_major_ticks():
    tick.label1On = False
    tick.label2On = True
    tick.label2.set_color('green')

plt.show()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容