pandas可视化(5)【官方文档解读】-- Hexagonal Bin Plot(我翻译为六角形箱体图)、饼图

浏览: 4542

前言

前文传送门:

pandas可视化(1)【官方文档解读】--基础绘图

pandas可视化(2)【官方文档解读】-- 条形图、直方图

pandas可视化(3)【官方文档解读】-- 箱线图

pandas可视化(4)【官方文档解读】-- 区域图、散点图


如绘图过程中,中文字体和负号显示有问题,可以参照如下链接修改配置参数设置正常显示:

https://www.joinquant.com/post/441


六角形箱体图

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.style.use('ggplot')#使用ggplot样式
%matplotlib inline

注:如前一章,先导入必要的模块和绘图的数据准备

六角形箱体图

你可以使用DataFrame.plot.hexbin()创建六边形图形图。 

如果您的数据太密集,可以单独绘制每个点,六角形箱体图可以是散点图的有用替代方法。

df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df.plot.hexbin(x='a', y='b', gridsize=10)

Clipboard Image.png

注:左边坐标表示的是值的分布(这个图是二维标准正态分布)

右边是数据量大小与颜色的对比,gridsize=10指的是大小,我们将其调为25:

df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df.plot.hexbin(x='a', y='b', gridsize=25)

Clipboard Image.png


我们接下来不做二维正态分布的图,加一个干扰:

df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df['b'] = df['b'] + np.arange(1000)
df.plot.hexbin(x='a', y='b', gridsize=25)

Clipboard Image.png


一个有用的关键字参数是gridsize; 它控制x方向的六边形数量,并且默认为100.较大的格栅意味着更多的较小的分区。

默认情况下,计算每个(x,y)点周围计数的直方图。 可以通过将值传递给C和reduce_C_function参数来指定替代聚合。

C指定每个(x,y)点处的值,reduce_C_function是一个参数的函数,将一个bin中的所有值都减少为一个数字(例如,mean,max,sum,std)。 

在该示例中,位置由列a和b给出,而值由列z给出。 bins与numpy的最大功能相结合。


df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df['b'] = df['b'] = df['b'] + np.arange(1000)
df['z'] = np.random.uniform(0, 3, 1000)
df.plot.hexbin(x='a', y='b', C='z', reduce_C_function=np.max,
gridsize=20)

Clipboard Image.png

注:这里z为在0-3上的均匀分布


饼图

可以使用DataFrame.plot.pie()或Series.plot.pie()创建饼图。 

如果您的数据包含任何NaN,它们将自动填满0.如果数据中有任何负值,则会引发ValueError。

series = pd.Series(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], name='series')
series.plot.pie(figsize=(6, 6))

Clipboard Image.png

注:饼图大小为6x6,如果长宽不一样,画出来是类似椭圆的


对于饼图,最好使用平方数字,具有相等的长宽比。 

可以创建具有相同宽度和高度的图形,或者通过在返回的轴对象上调用ax.set_aspect('equal')来强制绘制后的宽高比相等。

请注意,使用DataFrame的饼图需要您通过y参数或subplots = True指定目标列。 

指定y时,将绘制所选列的饼图。 如果指定subplots= True,则每列的饼图将绘制为子图。 

默认情况下,每个饼图将绘制一个图例; 指定legend = False隐藏它。

df = pd.DataFrame(3 * np.random.rand(4, 2), index=['a', 'b', 'c', 'd'], columns=['x', 'y'])
df.plot.pie(subplots=True, figsize=(9,4))

Clipboard Image.png

注:子图绘制,默认显示图例,可以自己指定整个图的长宽大小(这里我选取9x4最后效果比较好)


您可以使用标签和颜色关键字来指定每块的标签和颜色。

如果要隐藏标签,请指定标签=无。 如果指定了fontsize,该值将应用于标签。 

另外,可以使用matplotlib.pyplot.pie()支持的其他关键字。

series.plot.pie(labels=['AA', 'BB', 'CC', 'DD'], colors=['r', 'g', 'b', 'c'],
autopct='%.2f', fontsize=15, figsize=(6, 6))

Clipboard Image.png

注:colors指定每块对应的颜色,autopct是自动计算百分比显示,fontsize是百分比字体显示的大小


如果您传递总和小于1.0的值,则matplotlib绘制半圆。


series = pd.Series([0.1] * 4, index=['a', 'b', 'c', 'd'], name='series2')
series.plot.pie(figsize=(6, 6))

Clipboard Image.png

注:Clipboard Image.png是快速创建列表的一种方式


pandas绘制六角形箱体图和饼图图到此结束

文中所写如有谬误请指出,感谢!

参考文献

http://pandas.pydata.org/pandas-docs/stable/visualization.html#

推荐 4
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册