数据分析笔记_第九章_绘图和可视化

第九章 绘图和可视化

学习本章代码案例的最简单方法是在Jupyter notebook进行交互式绘图。在Jupyter notebook中执行下面的语句:

%matplotlib notebook

1 matplotlib API入门

matplotlib的通常引入约定是:

In [11]: import matplotlib.pyplot as plt

Figure和Subplot

In [17]: ax1 = fig.add_subplot(2, 2, 1)

这条代码的意思是:图像应该是2×2的(即最多4张图),且当前选中的是4个subplot中的第一个(编号从1开始)。如果再把后面两个subplot也创建出来

In [18]: ax2 = fig.add_subplot(2, 2, 2)
In [19]: ax3 = fig.add_subplot(2, 2, 3)

方法plt.subplots,它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组:

In [24]: fig, axes = plt.subplots(2, 3)
In [25]: axes
Out[25]:
array([[<matplotlib.axes._subplots.AxesSubplot object at
0x7fb626374048>,
<matplotlib.axes._subplots.AxesSubplot object at
0x7fb62625db00>,
<matplotlib.axes._subplots.AxesSubplot object at
0x7fb6262f6c88>],
[<matplotlib.axes._subplots.AxesSubplot object at
0x7fb6261a36a0>,
<matplotlib.axes._subplots.AxesSubplot object at
0x7fb626181860>,
<matplotlib.axes._subplots.AxesSubplot object at
0x7fb6260fd4e0>]], dtype
=object)

subplot参数
颜色、标记和线型

plot(randn(30).cumsum(), color='k', linestyle='dashed', marker='o')
# color颜色,linestyle线条类型,marker节点类型

刻度、标签和图例
为了说明自定义轴,我将创建一个简单的图像并绘制一段随机漫步:

In [37]: fig = plt.figure()
In [38]: ax = fig.add_subplot(1, 1, 1)
In [39]: ax.plot(np.random.randn(1000).cumsum())

图示
使用set_xticks和set_xticklabels。前者告诉matplotlib要将刻度放在数据范围中的哪些位置,默认情况下,这些位置也就是刻度标签。但我们可以通过set_xticklabels将任何其他的值用作标签:

In [40]: ticks = ax.set_xticks([0, 250, 500, 750, 1000])
In [41]: labels = ax.set_xticklabels(['one', 'two', 'three', 'four',
'five'],
....: rotation=30, fontsize='small')

图示
Y轴的修改方式与此类似,只需将上述代码中的x替换为y即可。

添加图例
图例(legend)是另一种用于标识图表元素的重要工具。最简单的是在添加subplot的时候传入label参数:

In [44]: from numpy.random import randn
In [45]: fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
In [46]: ax.plot(randn(1000).cumsum(), 'k', label='one')
Out[46]: [<matplotlib.lines.Line2D at 0x7fb624bdf860>]
In [47]: ax.plot(randn(1000).cumsum(), 'k--', label='two')
Out[47]: [<matplotlib.lines.Line2D at 0x7fb624be90f0>]
In [48]: ax.plot(randn(1000).cumsum(), 'k.', label='three')
Out[48]: [<matplotlib.lines.Line2D at 0x7fb624be9160>]

可以调用ax.legend()或plt.legend()来自动创建图例

In [49]: ax.legend(loc='best'

图例
将图表保存到文件

plt.savefig('figpath.svg')

savefig参数

2 使用pandas和seaborn绘图

线型图
DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例

In [62]: df = pd.DataFrame(np.random.randn(10, 4).cumsum(0),
....: columns=['A', 'B', 'C', 'D'],
....: index=np.arange(0, 100, 10))
In [63]: df.plot()

图例
参数设置
柱状图
plot.bar()和plot.barh()分别绘制水平和垂直的柱状图。

In [64]: fig, axes = plt.subplots(2, 1)
In [65]: data = pd.Series(np.random.rand(16),
index=list('abcdefghijklmnop'))
In [66]: data.plot.bar(ax=axes[0], color='k', alpha=0.7)
Out[66]: <matplotlib.axes._subplots.AxesSubplot at 0x7fb62493d470>
In [67]: data.plot.barh(ax=axes[1], color='k', alpha=0.7)

图示
对于在绘制一个图形之前,需要进行合计的数据,使用seaborn可以减少工作量。

n [83]: import seaborn as sns
In [84]: tips['tip_pct'] = tips['tip'] / (tips['total_bill'] -
tips['tip'])
In [85]: tips.head()
Out[85]:
total_bill tip smoker day time size tip_pct
0 16.99 1.01 No Sun Dinner 2 0.063204
1 10.34 1.66 No Sun Dinner 3 0.191244
2 21.01 3.50 No Sun Dinner 3 0.199886
3 23.68 3.31 No Sun Dinner 2 0.162494
4 24.59 3.61 No Sun Dinner 4 0.172069
In [86]: sns.barplot(x='tip_pct', y='day', data=tips, orient='h')

图示

3 其它的Python可视化工具
Boken(https://bokeh.pydata.org/en/latest/)和
Plotly(https://github.com/plotly/plotly.py),现在可以创建动态交互图形,
用于网页浏览器。


版权声明:本文为JabinY原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。