查看原文
其他

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

2017-08-11 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei



前言

前文传送门:

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

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

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

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


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

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


环境

IDE : jupyter notebook

Anaconda 3.X



六角形箱体图
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)


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

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

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



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

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)



一个有用的关键字参数是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)


注:这里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))


注:饼图大小为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))


注:子图绘制,默认显示图例,可以自己指定整个图的长宽大小(这里我选取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))


注: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))


注:是快速创建列表的一种方式


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

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

参考文献

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

微课福利:Hellobi live |8月22日,利用 Python 建构金融数据分析平台


查看下图说明免费参加或者点击文末阅读原文参加

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。

长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存