数据可视化
设置绘图可以在jupyter notebook显示
# 设置在notebook中直接展示图形输出
%matplotlib inline
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'
可以使用下面三种方法绘图
- 直接使用DataFrame绘图,比如
iris.plot()
iris是个DataFrame数据,dataframe的绘图也是基于matplotlib - 导入
import matplotlib.pyplot as plt
matplotlib作图工具包 - seaborn 数据可视化包
常见的绘图有:
- 条形图
- 绘制多图
- 饼图
- 散点图
- 直方图
matplotlib是什么
matplotlib是Python编程语言的一个绘图库,与Python深度集成,风格与Matlab接近
绘图基础
绘图一般使用 matplotlib包中的pyplot
因此 通常我们这么导入
import matplotlib.pyplot as plt
设置在notebook中直接展示图形输出
设置清晰度
%matplotlib inline
# 设置图片清晰度
%config InlineBackend.figure_format = 'retina'
plt.plot()是常用的绘图函数
plt.show()显示绘图
# 设置横坐标x的取值范围
x = np.arange(0, 5, 0.1);
# 根据x的值,通过sin()函数,获取y的值
y = np.sin(x)
# 使用matplotlib中的plot绘图函数
plt.plot(x, y)
# 添加标题、x轴和y轴的名称
plt.title("sine function") # 标题
plt.xlabel("x value") # x坐标
plt.ylabel("y value") # y坐标
# 显示图像
plt.show()
我们可以控制图形的每一个细节
"b"代表blue,指定蓝色,"-"指定线的种类
linewidth指定线的粗细
plt.plot(x, y, "b-", linewidth=2.0)
使用marker参数给线加标记符号
plt.plot(x,y, color = "blue", marker = ".")
设定xy轴的区间
plt.axis([0, 5, -1.1, 1.1])
等价于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
显示网格
plt.grid(True)
加上文字描述
plt.text(3.1, 0.3, 'sin functoin')
在同一个坐标系位置多个图
各个图使用逗号隔开
下面这个例子展示了,不同选项对图形产生的不同效果
t = np.arange(0., 5., 0.2)dzb
在[0,5]的区间上分别绘制了 y=x, y=x^2, 和y=x^3
"r"表示red红色,“--”表示虚线,
“b”表示blue蓝色,“s”表示square正方形,
“g”表示green绿色,“^”表示三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
穿插DataFrame方法
sort_values排序方法,by参数指定根据哪个属性排序
top10 = df.groupby('name')['ext price'].agg(['sum', 'count']).reset_index().sort_values(by='sum', ascending=False)[:10]
rename方法,可以对变量重新命名 inplace = True表示对源数据进行修改
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)
绘制条形图plt.bar
绘图风格设置
# 使用ggplot风格的作图
plt.style.use('ggplot')
# 使用available属性查看可用的风格
plt.style.available
绘制条形图的核心方法
plt.barh 绘制水平方向的条形图,
plt.bar绘制垂直方向的直方图
plt.barh(np.arange(10), top10.Sales, height=0.5)
使用 ticks修改坐标的刻度 将数字改为有意义的字符串
plt.yticks(np.arange(10), top10.Name)
plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000],
['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])
绘制多图fig.add_subplot
在同一幅图中,分别绘制图,不共用坐标系。
- 设置画布大小plt.figure(figsize= 并返回画布对象
fig = plt.figure(figsize=(12,5)) - 给画图加上标题, fontsize=14 字体大小, fontweight='bold' 加粗
fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold') - 添加第一个子图fig.add_subplot() 其中121表示 1行2列第一个图
ax1 = fig.add_subplot(121) #会返回这个子图
添加之后 默认后续操作都是在子图上进行的
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue')
# 加入平均销售额,用一条垂直的虚线表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1)
axvline 绘制垂直线 参数x表示在x轴上的位置,
- 添加第二个图
ax2 = fig.add_subplot(122) #表示1行2列第二个图
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units')
# 不显示y轴刻度
plt.yticks(visible=False)
# 加入平均交易个数,用一条垂直的虚线表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)
plt.show()
饼图plt.pie
不需要xy轴,绘制的数据,标签名,autopct自动显示百分比
# pie绘制饼图,labels设置每个区域的标签名,autopct 显示所占比例
plt.pie(top10.Sales, labels=top10.Name, autopct='%1.1f%%')
# 调整轴的比例
plt.axis('equal')
plt.show()
散点图plt.scatter
scatter 绘制散点图,x,y设置x轴和y轴对应的数据,s设置点的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)
直方图plt.hist
hist绘制直方图,bins设置区间个数 rwidth表示每个条的宽度 默认为1
plt.hist(df['ext price'], bins=20, rwidth=0.9)
设置x轴区间范围
plt.xlim(-200, 5000)
Python数据可视化模块—Seaborn
- Seaborn是基于matplotlib产生的一个模块,专攻于统计可视化
- 可以和pandas进行无缝链接,初学者使用Seaborn更容易上手
- Seaborn和matplotlib的关系类似于pandas和numpy的关系。
# 导入seaborn包, 简写成sns
import seaborn as sn
使用sns作图
sns通用绘图
sns.FacetGrid().map()
facetGrid对应的是数据,map将前面的数据映射成图表。 这是比较通用的做法。
使用seaborn做图, 用品种划分数据
FacetGrid对象是用来连接pandas DataFrame到一个有着特别结构的matplotlib图像
具体来说,FacetGrid是用来画一组固定的关系给定某个变量的某个值
FacetGrid中的hue参数指明划分数据的变量,这里是species(品种)
sns.FacetGrid(iris, hue="species", size=8) \
.map(plt.scatter, "petal_length", "petal_width").add_legend()
sns绘制直方图
col='Survived'指定将图片在一行中做出生还和罹难与年龄的关系图
sns.FacetGrid(titanic_df, col='Survived').
map(plt.hist, 'Age', bins=20, normed=True)
sns绘制箱图
sns.boxplot()
sns.boxplot(data=iris, x="species", y="sepal_width")
sns各个变量之间的关系图
sns.pairplot()
sns.pairplot(iris, hue="species")
sns绘制条形图
sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)
其中ci=None表示不显示置信区间
绘制折线图:使用sns.pointplot
sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)
上一篇: 数据可视化