pandas绘图_绝了!Pandas绘图功能

柱状图箱线图密度图条形图散点图折线图保存绘图总结

可视化是用来探索性数据分析最强大的工具之一。Pandas库包含基本的绘图功能,可以让你创建各种绘图。Pandas中的绘图是在matplotlib之上构建的,如果你很熟悉matplotlib你会惊奇地发现他们的绘图风格是一样的。

本案例用到的数据集是关于钻石的。

import numpy as np
import pandas as pd
import matplotlib

%matplotlib inline
diamonds = pd.read_csv("diamonds.csv")
diamonds = diamonds.drop("Unnamed: 0", axis=1)

print(diamonds.shape)        

diamonds.head(5)
(53940, 10)
3e21803d6f0b69ceec4a58608fd5f284.png

输出结果显示,数据集包含53940个不同钻石的10个特征,其中有数值变量也有分类变量。

柱状图

柱状图是一个单变量图(注意区分柱状图和条形图),它将一个数值变量分组到各个数值单元中,并显示每个单元中的观察值数量。直方图是了解数值变量分布的一种有用工具。所用到的方法是df.hist()

diamonds.hist(column="carat",        # 具体列
              figsize=(8,8),         # 图片大小
              color="blue");         # 绘画颜色
3c40d674ba472a5ae0de3dec646ed23c.png

从图上我们可以看到钻石重量的分布是十分倾斜的:大多数钻石大约1克拉及以下,但也有极少量极端值。
为了获得更多细节的数据,我们可以增加分箱的数量来查看更小范围内的钻石重量,通过限制x轴的宽度使整个图形在画布上显得不那么拥挤。

diamonds.hist(column="carat",        
              figsize=(8,8),         
              color="blue",          
              bins=50,               
              range= (0,3.5));       
c9d86ac122485e3ac09c16079f228d40.png

这个直方图让我们更好地了解了分布中的一些细微差别,但我们不能确定它是否包含所有数据。将X轴限制在3.5可能会剔除一些异常值,以至于它们在原始图表中没有显示。接下来看看有没有钻石大于3.5克拉:

diamonds[diamonds["carat"] > 3.5]
ad5cb94654fadea1d7c1b551ddb18959.png

哦豁,真的有9颗钻石比3.5克拉大,这些'怪种'钻石我们应该关心吗?出于数据探索的目的,我们完全可以舍弃这些点,但如果是把数据的全貌展示给别人看,我觉得有必要详细说明:范围之外还存在9个离群点。

箱线图

箱线图是另一种单变量图, 方法pd.boxplot()

diamonds.boxplot(column="carat");
77001cb708007130517effa529ec99e3.png

箱线图的中心框代表中间50%的观察值,中心线代表中位数。
boxplot最有用的特性之一是能够生成并排的boxplots。每个分类变量都在一个不同的boxside上绘制一个分类变量。接下来将钻石价格按钻石净度分成两部分来做一个并排的方框图:

diamonds.boxplot(column="price",        
                 by= "clarity",         
                 figsize= (8,8));       
4518a6d58fa41605364f1aaa6882feba.png

上面的箱线图很奇怪:按理说清晰度更好的钻石能卖到更高的价格,然而清晰度最高的钻石(IF)的中间价却比低净度钻石低!这是为什么呢?也许下面这个图可以给我们一些启示:

diamonds.boxplot(column="carat",        
                 by= "clarity",         
                 figsize= (8,8));       
368a7c65d787eed2558fdcfe79bf71ef.png

上面的图表显示,透明度较低的钻石往往更大,透明度高的钻石更加小巧。由于尺寸重量是决定钻石价值的另一个重要因素,因此低透明度钻石的中间价较高也就不足为奇了。

密度图

密度图以连续曲线显示数值变量的分布。它类似于柱状图,但密度图能更好地显示分布的基本形状。series.plot(kind="density")

diamonds["carat"].plot(kind="density", 
                      figsize=(8,8),    
                      xlim= (0,5));     
8d153cef90f85ee3e15f2b7674c51c83.png

条形图

条形图是直观显示分类变量计数的图形,df.plot(kind="bar"):

carat_table = pd.crosstab(index=diamonds["clarity"], columns="count")
carat_table
221c6523cd306968a5f9a43389eea136.png
carat_table.plot(kind="bar",
                 figsize=(8,8));
09b963f11c41f249c4f35b1337a119e8.png

可以使用二维表格创建堆积条形图。堆积条形图显示每个条形图中另一个变量的分布:

carat_table = pd.crosstab(index=diamonds["clarity"], 
                          columns=diamonds["color"])

carat_table
caec44c26f3cb38450a9c606e3a5ef31.png
carat_table.plot(kind="bar", 
                 figsize=(8,8),
                 stacked=True);
63ec5edf0c5cfe81059e255348b92084.png

分组条形图是堆叠条形图的另一种选择,设置stacked=False即可:

carat_table.plot(kind="bar", 
                 figsize=(8,8),
                 stacked=False);
5243277bb4775fc6b0ad505ee2ebb851.png

散点图

散点图是双变量图,采用两个数值变量,并在x/y平面上绘制数据点。创建单个散点图使用方法df.plot(kind="scatter"):

diamonds.plot(kind="scatter",     # Create a scatterplot
              x="carat",          # Put carat on the x axis
              y="price",          # Put price on the y axis
              figsize=(10,10),
              ylim=(0,20000));
308db2815a63e60dc24df64e4b55105c.png

尽管上面的散点图有许多重叠点,但它仍然让我们对钻石克拉重量和价格之间的关系有了一些了解:大钻石通常更贵。

折线图

折线图通常用于绘制时间序列数据:

years = [y for y in range(1950,2016)]

readings = [(y+np.random.uniform(0,20)-1900) for y in years]

time_df = pd.DataFrame({"year":years,
                        "readings":readings})


time_df.plot(x="year",
             y="readings",
             figsize=(9,9));
aafe9be7a0d4f1454659551c5318c80a.png

保存绘图

如果要保存图片供以后使用,两步就可以轻松解决:首先用plot.get_figure(),然后用figure.savefig("filename")。图片可以保存为多种常见的文件格式,例如png、jpeg和pdf。

my_plot = time_df.plot(x="year",    
             y="readings",
             figsize=(9,9))

my_fig = my_plot.get_figure()            

my_fig.savefig("line_plot_example.png")  
aafe9be7a0d4f1454659551c5318c80a.png

总结

Python绘图生态系统有许多不同的库,大部分人可能会很难从中抉择,不知道该如何人下手。Pandas绘图函数使你能够快速地可视化和浏览数据。Pandas绘图函数并没有提供尽善尽美的所有功能,但它们通常足以完成任务。

往期推荐:

收藏 | 49 个 Python 学习资源

我都逛哪些技术网站?(程序员必备58个网站汇总)

肝!精心整理了 50 个数据源网站!

b4f08c06aa00387562953e922159dca6.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值