Matplotlib

pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,期中read_csv和read_table这两个使用最多

  • 使用read_csv读取
  • 使用read_table读取
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
df1 = pd.read_csv('./data/type_line')  # read_csv默认是按照,去分割的 遇到-不分割 当成了一块内容
df1 = pd.read_csv('./data/type_line',sep='-')  # 如果不是逗号分割的 需要指定分隔符
# 默认会把第一行当成列名 如果第一行不是列名 是内容 可以设置header参数为None
df1 = pd.read_csv('./data/type_line',sep='-',header=None) 
df1.shape
df1
# 用来读取 table separated value tsv文件 是用\t分割的一系列值
pd.read_table('./data/wheats.tsv')
pd.read_table('./data/wheats.tsv',header=None)
# read_table也可以读其他类型的文件 只不过要指定分隔符
pd.read_table('./data/type_comma')
pd.read_table('./data/type_comma',sep=',')
pd.read_csv('./data/wheats.tsv',sep='\t',header=None)

读写excel

使用 pd.read_excel() 读取excel表格
使用 df.to_excel() 输出excel表格
可能需要安装库 >>> conda install openpyxl >>> conda install xlsxwriter >>> conda install xlrd

df2 = pd.read_excel('./data/jfeng.xlsx')
df2
# 要保存哪个DataFrame 就用这个DataFrame调用 to_excel方法 (注意是DataFrame对象 不是pandas模块) 
df2.to_excel('./jfeng.xlsx')

读取sqlite文件(其他数据库文件也是类似的操作 这里以sqlite为例)

导包 import sqlite3

import sqlite3

连接数据库
sqlite3.connect('dbpath')

读取table内容
pd.read_sql("SQL语句", con)

写入数据库文件 df对象.to_sql('table_name',connection)

操作数据库 connection.execute(SQL语句)

connection = sqlite3.connect('./data/weather_2012.sqlite')
connection
# 数据库可视化工具 mysql-Navicat MongoDB-robot 3T sqllite-SQLite Expert Personal
# sql, con, index_col=None
# 查询: 传入查询语句 连接对象 设置索引列
pd.read_sql('select * from weather_2012',connection)
pd.read_sql('select * from weather_2012',connection,index_col='index')
# 创建表格 把df2这个表格存入数据库
# 参数 name, con 要新建的表格的名字 连接对象
df2.to_sql('jfeng',connection)
# 删除表格
connection.execute('drop table jfeng')  # drop table 要删除的表格名

使用read_csv直接读取网络上的数据

url = 'https://raw.githubusercontent.com/datasets/investor-flow-of-funds-us/master/data/weekly.csv'

url = 'https://raw.githubusercontent.com/datasets/investor-flow-of-funds-us/master/data/weekly.csv'
pd.read_csv(url)

透视表

各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上的分组键将数据分配到各个矩形区域中

data = np.random.randint(60,100,size=(6,2))
columns = ['height','weight']
df = DataFrame(data=data,columns=columns)
df['age'] = [20,18,30,26,22,32]
df['smoke'] = [True,False,True,False,False,False]
df['sex'] = ['male','female','male','male','female','female']
df

行分组透视表 设置index参数

列分组透视表 设置columns参数

行列分组的透视表 同时设定index、columns参数

fill_value:替换结果中的缺失值

# 男性的平均年龄 和 女性的平均年龄

df.groupby('sex').groups
df.groupby('sex')['age'].mean()
df.groupby('sex')[['age','height','smoke','weight']].mean()
# 透视表
pd.pivot_table(df,index='sex')
pd.pivot_table(df,columns='sex')

交叉表

是一种用于计算分组频率的特殊透视图,对数据进行汇总

pd.crosstab(index,colums)

  • index:分组数据,交叉表的行索引
  • columns:交叉表的列索引
# 男性和女性 吸烟和不吸烟 的人数
pd.crosstab(index=df.sex,columns=df.smoke)
pd.crosstab(index=df.smoke,columns=df.sex)

matplotlib

目录

  • 一、Matplotlib基础知识

  • 二、设置plot的风格和样式

    • 1、点和线的样式
    • 2、同时设置多个曲线样式
    • 3、曲线样式的三种设置方式
    • 4、X、Y轴坐标刻度
  • 三、2D图形

    • 1、示例
    • 2、【重点】直方图
    • 3、【重点】条形图
    • 4、【重点】饼图
    • 5、【重点】散点图

=============以上为重点=================

  • 四、图形内的文字、注释、箭头

    • 1、图形内的文字
    • 2、注释
    • 3、箭头
  • 五、3D图

    • 1、曲面图

一、Matplotlib基础知识

Matplotlib中的基本图表包括的元素

  • x轴和y轴 axis 水平和垂直的轴线

  • 轴标签 axisLabel 水平和垂直的轴标签

  • x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度和最大刻度

  • x轴和y轴刻度标签 tick label 表示特定坐标轴的值

  • 绘图区域(坐标系) axes 实际绘图的区域

  • 画布 figure 呈现所有的坐标系

只含单一曲线的图

# 正弦曲线
# 先获取x -π到π
x = np.arange(-np.pi,np.pi,0.1)  # [start,] stop[, step,] 开始值 结束值 步长值
x
y = np.sin(x)
y
plt.plot(x,y)  # plot(x, y) 最简单的参数形式 传入x和y的值

包含多个曲线的图

1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

# 绘制两个图 一个是 -π到0 另一个是0到π
x1 = np.arange(-np.pi,0,0.1)
x2 = np.arange(0,np.pi,0.1)
# 方式一:多次使用 plt.plot绘制多个函数
plt.plot(x1,np.sin(x1))
plt.plot(x2,np.sin(x2))

2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

x1 = np.arange(-np.pi,0,0.1)
x2 = np.arange(0,np.pi,0.1)
# 方式二 调用一次plt.plot里面传入多个x和y的值 plt.plot(x1,y1,x2,y2,...xn,yn)
plt.plot(x1,np.sin(x1),x2,np.sin(x2))

子画布

# 先调整一下画布大小
plt.figure(figsize=(8,8))
# For example, ``subplot(2, 3, 3)`` and ``subplot(233)`` 
# subplot(2, 3, 3) 创建一个子画布 把原来的大的画布 上下分成2部分 左右分成3部分 占用哪个部分
# axes1 = plt.subplot(2,2,1)  # 根据传入的参数创建子画布 返回坐标系对象
# axes2 = plt.subplot(2,2,2)
# axes3 = plt.subplot(2,2,3)
# axes4 = plt.subplot(2,2,4)
axes1 = plt.subplot(4,2,1)  # 根据传入的参数创建子画布 返回坐标系对象
axes2 = plt.subplot(4,2,4)
axes3 = plt.subplot(2,2,3)
axes4 = plt.subplot(2,2,4)
# 接下来注意 是在每一个小的坐标系上绘图 而不是在大的画布上绘图 所以 是用对应的axes对象来调用plot
axes1.plot(x,np.sin(x))
axes2.plot(x,np.cos(x))
axes3.plot(x,np.tan(x))
axes4.plot(x,np.tanh(x))

网格线

使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线

  • axis显示轴向
  • color代表颜色
  • alpha表示线的明暗程度
  • lw代表linewidth,线的粗细
plt.figure(figsize=(8,8))
axes1 = plt.subplot(221)
axes2 = plt.subplot(222)
axes3 = plt.subplot(223)
axes4 = plt.subplot(224)
# 给坐标系添加网格
# plt.grid()  # 注意plt.grid()确实可以绘制网格线 但是如果有子画布 plt.grid只会给离他最近的那个子画布绘制网格线
axes1.grid()  # axis='both' 默认水平竖直方向都有网格线
axes2.grid(axis='x')  # 在轴上方绘制网格线
axes3.grid(axis='y')
axes4.grid(color='red',linewidth=2,alpha=0.2)

坐标轴的轴线

plt.axis([xmin,xmax,ymin,ymax])

# 绘制圆形
x = np.linspace(-1,1,100)
x
# x**2+y**2=1
# y**2=1-x**2
# y=(1-x**2)**0.5
y=(1-x**2)**0.5
plt.plot(x,y)
plt.plot(x,-y)
plt.axis([-2,2,-2,2])  # [x轴的起始值,x轴的结束值,y轴的起始值,y轴的结束值]
plt.axis([-1.5,1,-5,3])
# plt.axis([0.5,0.5,1,1])

plt.axis('xxx') 'off'、'equal'……

设置坐标轴类型
关闭坐标轴

x = np.linspace(-1,1,100)
x
# x**2+y**2=1
# y**2=1-x**2
# y=(1-x**2)**0.5
y=(1-x**2)**0.5
plt.plot(x,y)
plt.plot(x,-y)
plt.axis('equal')  # 让x轴和y轴等长
plt.axis('off')

xlim方法和ylim方法

除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围

x = np.linspace(-1,1,100)
x
# x**2+y**2=1
# y**2=1-x**2
# y=(1-x**2)**0.5
y=(1-x**2)**0.5
plt.plot(x,y)
plt.plot(x,-y)
plt.xlim([-3,3])
plt.ylim([-2,2])

坐标轴的标签

plt.xlabel( )方法 和 plt.ylabel( )方法
例如 plt.ylabel('y = x^2 + 5',rotation = 60)

  • color 标签颜色
  • fontsize 字体大小
  • rotation 旋转角度
# 正弦曲线
x = np.arange(-np.pi,np.pi,0.1)
x
y = np.sin(x)
plt.plot(x,y)
# s x标签的内容
plt.xlabel('x')
plt.ylabel('f(x)=sin(x)')
plt.xlabel('x',color='orange',fontsize=20,rotation=20)
plt.ylabel('f(x)=sin(x)',rotation=20)
plt.ylabel('f(x)=sin(x)',rotation=90)  # y轴标题 默认就是旋转了90度

画布的标题

plt.title()方法

  • loc 标题位置{left,center,right}
  • color 标题颜色
  • fontsize 字体大小
  • rotation 旋转角度
# 正弦曲线
x = np.arange(-np.pi,np.pi,0.1)
x
y = np.sin(x)
plt.plot(x,y)
# 参数 s标题的内容
# plt.title('Sin(x)')
# plt.title('Sin(x)',color='red',fontsize=25,rotation=45)
# loc : {'center', 'left', 'right'},
# plt.title('Sin(x)',color='red',fontsize=25,rotation=45,loc='left')
plt.title('Sin(x)',color='red',fontsize=25,rotation=45,loc='right')  # 默认在中间

图例

legend方法

两种传参方法:

  • 分别在plt.plot( )函数中增加label参数,再调用plt.legend( )方法显示
  • 直接在legend方法中传入字符串列表 如:plt.legend(['normal','fast','slow'])
# 方式一 plt.plot()中传入名字
x = np.linspace(0,10,101)
x
plt.plot(x,x,label='normal')
plt.plot(x,2*x,label='fast')
plt.plot(x,x/2,label='slow')
plt.legend()
# 方式二 把名字一起传入 plt.legend()中
x = np.linspace(0,10,101)
x
plt.plot(x,x)
plt.plot(x,2*x)
plt.plot(x,x/2)
plt.legend(['normal','fast','slow'])

loc参数

  • loc参数用于设置图例的位置,一般在legend函数内
  • matplotlib已经预定义好几种数字表示的位置
    字符串 数值 字符串 数值
    best 0 center left 6
    upper right 1 center right 7
    upper left 2 lower center 8
    lower left 3 upper center 9
    lower right 4 center 10
    right 5
    loc参数还可以是2元素的列表,表示图例左下角的坐标

[0,0] 左下
[0,1] 左上
[1,0] 右下
[1,1] 右上
图例也可以超过图的界限loc = (-0.1,0.9)

data = np.random.randint(0,100,size=(10,3))
df = DataFrame(data,columns=list('ABC'))
df
plt.plot(df['A'])
plt.plot(df['B'])
plt.plot(df['C'])
# loc参数 The location of the legend 设置图例的位置
# plt.legend(['1','2','3'],loc=0)  # 
# plt.legend(['1','2','3'],loc=1)
# plt.legend(['1','2','3'],loc=2)
# plt.legend(['1','2','3'],loc=10)
# plt.legend(['1','2','3'],loc=[1,1])
# plt.legend(['1','2','3'],loc=[0,1])
# plt.legend(['1','2','3'],loc=[0,0])
# plt.legend(['1','2','3'],loc=[1,0])
plt.legend(['1','2','3'],loc=[1.2,-0.5])

ncol参数

ncol控制图例中有几列,在legend中设置ncol,需要设置loc

data = np.random.randint(0,100,size=(10,3))
df = DataFrame(data,columns=list('ABC'))
df
plt.plot(df['A'])
plt.plot(df['B'])
plt.plot(df['C'])
# plt.legend(ncol=2)
plt.legend(ncol=3)

二、设置plot的风格和样式

plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
plt.plot(X, Y, 'format', ...)

点和线的样式

颜色

  • 参数color或c
  • 颜色值的方式
    • 合法的HTML颜色名
      • color = 'red'
    • 别名
      • color='r'
    • HTML十六进制字符串
      • color = '#eeefff'
    • 归一化到[0, 1]的RGB元组
      • color = (0.3, 0.3, 0.4)
        颜色 别名 HTML颜色名 颜色 别名 HTML颜色名
        蓝色 b blue 绿色 g green
        红色 r red 黄色 y yellow
        青色 c cyan 黑色 k black
        洋红色 m magenta 白色 w white
x = np.linspace(-np.pi,np.pi,100)
x
# 设置颜色
# plt.plot(x,np.sin(x),color='red')
# plt.plot(x,np.sin(x),c='red')
# plt.plot(x,np.sin(x),c='r')
# plt.plot(x,np.sin(x),c='g')
# plt.plot(x,np.sin(x),c='#aabbcc')
plt.plot(x,np.sin(x),c=(1,0.2,0.5))

透明度

plt.plot() 中的 alpha参数

x = np.linspace(-np.pi,np.pi,100)
plt.plot(x,np.sin(x),c=(1,0.2,0.5),alpha=0.2)  # 取值范围0-1

背景色

设置背景色,通过plt.subplot()方法传入facecolor参数,来设置坐标系的背景色

x = np.linspace(-np.pi,np.pi,100)
# plt.plot(x,np.sin(x),c=(1,0,0))  # 注意 facecolor='gray' 不是plt.plot()的参数
plt.subplot(facecolor='gray')  # 一定要注意 先画背景色 再划线 否则背景色就把线给盖住了
plt.plot(x,np.sin(x),c=(1,0,0))

线型和线宽

  • 参数linestyle或ls
  • linewidth或lw参数
线条风格 描述 线条风格 描述
'-' 实线 ':' 虚线
'--' 破折线 'steps' 阶梯线
'-.' 点划线 'None' / ',' 什么都不画
x = np.arange(0,10,1)
x
# linestyle 线的样式
# plt.plot(x,x,linestyle='-')
# plt.plot(x,x,linestyle=':')  # dotted
# plt.plot(x,x,linestyle='--')  # dashed
# plt.plot(x,x,linestyle='-.')
# plt.plot(x,x,linestyle='steps')
# plt.plot(x,x,linestyle='None')
# plt.plot(x,x,linestyle='--',linewidth=5)
plt.plot(x,x,ls='--',lw=5)  # ls linestyle 线的样式 lw linewidth 线的宽度

破折线

dashes参数 eg.dashes = [20,50,5,2,10,5]

设置破折号序列各段的宽度

x = np.arange(-np.pi,np.pi,0.1)
y = np.sin(x)
# plt.plot(x,y,dashes=[10])  # 必须是偶数个值 否则会报错
# plt.plot(x,y,dashes=[10,10])  # 实现长10 间隙长10
# plt.plot(x,y,dashes=[10,5,5,2])
# plt.plot(x,y,dashes=[2,4,3,5,10,5])

点型

  • marker 设置点形
  • markersize 设置点形大小
标记 描述 标记 描述
'1' 一角朝下的三脚架 '3' 一角朝左的三脚架
'2' 一角朝上的三脚架 '4' 一角朝右的三脚架
标记 描述 标记 描述
's' 正方形 'p' 五边形
'h' 六边形1 'H' 六边形2
'8' 八边形
标记 描述 标记 描述
'.' 'x' X
'*' 星号 '+' 加号
',' 像素
标记 描述 标记 描述
'o' 圆圈 'D' 菱形
'd' 小菱形 '','None',' ',None
标记 描述 标记 描述
'_' 水平线 ' ' 竖线
标记 描述 标记 描述
'v' 一角朝下的三角形 '<' 一角朝左的三角形
'^' 一角朝上的三角形 '>' 一角朝右的三角形
x = np.arange(1,10,1)
x
y = np.sin(x)
# plt.plot(x,y)
# plt.plot(x,y,marker='1',markersize=20)
# plt.plot(x,y,marker='2',markersize=20)
# plt.plot(x,y,marker='1',markersize=20)
# plt.plot(x,y,marker='h',markersize=20)
# plt.plot(x,y,marker='H',markersize=20)
# plt.plot(x,y,marker='*',markersize=20)
# plt.plot(x,y,marker='|',markersize=20)
# plt.plot(x,y,marker='_',markersize=20)
x = np.arange(1,10,1)
x
y = np.sin(x)
plt.plot(x,y,marker='h',markersize=20,markeredgecolor='red',markeredgewidth=5,markerfacecolor='green')

更多点和线的设置

  • markeredgecolor = 'green',
  • markeredgewidth = 2,
  • markerfacecolor = 'purple'
参数 描述 参数 描述
color或c 线的颜色 linestyle或ls 线型
linewidth或lw 线宽 marker 点型
markeredgecolor 点边缘的颜色 markeredgewidth 点边缘的宽度
markerfacecolor 点内部的颜色 markersize 点的大小
x = np.arange(1,10,1)
x
y = np.sin(x)
plt.plot(x,y,marker='h',markersize=20,markeredgecolor='red',markeredgewidth=5,markerfacecolor='green')

在一条语句中为多个曲线进行设置

多个曲线同一设置

属性名声明,不可以多参数连用

plt.plot(x1, y1, x2, y2, ...)

# 同时设置多个曲线的样式 (多个曲线样式相同)
x = np.linspace(0,100,30)  # 0-100要30个
x
# plt.plot(x1,y1,x2,y2,x3,y3...) 颜色 点的形状 线的样式
plt.plot(x,x,x,2*x,x,x/2,c='r',marker='*',ls=':')

多个曲线不同设置

多个都进行设置时,多参数连用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)

# 同时设置多个曲线的样式 (多个曲线样式不同)
x = np.linspace(0,100,30)  # 0-100要30个
x
# plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...) fmt format 格式 格式化字符串 就是按照人家指定的格式去设置样式的字符串
# fmt = '[color][marker][line]' '颜色 点的样式 线的样式'
plt.plot(x,x,'ro:',x,2*x,'k*--',x,x/2,'c1-.')  # 青色 1 -.

三种设置方式

向方法传入关键字参数

plt.plot(...)

就是之前我们一直用的 调用plt.plot()绘图的时候往里面传参数的方式

优点:简洁方便 缺点:容易乱 没提示 可读性差

对坐标系使用一系列的setter方法

  • axes = plt.subplot()获取坐标系
    • set_title()
    • set_facecolor()
    • set_xticks、set_yticks 设置刻度值
    • set_xticklabels、set_yticklabels 设置刻度名称
x = np.linspace(0,100,30)  # 0-100要30个
x
axes  = plt.subplot()
axes.plot(x,x,x,2*x,x,x/2)
axes.set_title('title')
axes.set_facecolor('gray')
axes.set_xlabel('x')
axes.set_ylabel('y')

对实例使用一系列的setter方法

  • plt.plot()方法返回一个包含所有线的列表,设置每一个线需要获取该线对象
    • eg: lines = plt.plot(); line = lines[0]
    • line.set_linewith()
    • line.set_linestyle()
    • line.set_color()
x = np.linspace(0,100,30)  # 0-100要30个
x
lines = plt.plot(x,x,x,2*x,x,x/2)
lines[0].set_linewidth(5)
lines[1].set_linestyle(':')
lines[2].set_color('y')

X、Y轴坐标刻度

plt.xticks()和plt.yticks()方法

  • 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
  • 支持fontsize、rotation、color等参数设置

正弦余弦

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

推荐阅读更多精彩内容