前言
一般我们做数据挖掘或者是数据分析,再或者是大数据开发提取数据库里面的数据时候,难免只能拿着表格数据左看右看,内心总是希望能够根据自己所想立马生成一张数据可视化的图表来更直观的呈现数据。而当我们想要进行数据可视化的时候,往往需要调用很多的库与函数,还需要数据转换以及大量的代码处理编写。这都是十分繁琐的工作,确实只为了数据可视化我们不需要实现数据可视化的工程编程,这都是数据分析师以及拥有专业的报表工具来做的事情,日常分析的话我们根据自己的需求直接进行快速出图即可,而Pandas正好就带有这个功能,当然还是依赖matplotlib库的,只不过将代码压缩更容易实现。下面就让我们来了解一下如何快速出图。
Pandas数据分析:快速图表可视化各类操作详解+实例代码(一)
Pandas数据分析系列专栏已经更新了很久了,基本覆盖到使用pandas处理日常业务以及常规的数据分析方方面面的问题。从基础的数据结构逐步入门到处理各类数据以及专业的pandas常用函数讲解都花费了大量时间和心思创作,如果大家有需要从事数据分析或者大数据开发的朋友推荐订阅专栏,将在第一时间学习到Pandas数据分析最实用常用的知识。此篇博客篇幅较长,涉及到数据可视化等各类操作,值得细读实践一番,我会将Pandas的精华部分挑出细讲实践。博主会长期维护博文,有错误或者疑惑可以在评论区指出,感谢大家的支持。
一、箱线图
数据依旧是上篇文章的数据:
调用
- Series.plot.box()
- DataFrame.plot.box()
- DataFrame.boxplot()
可以绘制箱线图可视化每个列中的值分布。
df_flow_mark[['风级','降水量']].plot.box()
可以通过传递color关键字对Boxplot进行着色。你可以传递一个字典dict,key关键字为boxes、whiskers,medians,caps。如果dict中缺少一些键,则会为相应的使用默认颜色。此外,箱线图还有sym关键字来指定传单样式。
color = { "boxes": "DarkGreen", "whiskers": "DarkOrange", "medians": "DarkBlue", "caps": "Gray", } df_flow_mark[['风级','降水量']].plot.box(color=color, sym="r+")
创建一个数据集展示更加明显:
df = pd.DataFrame(np.random.rand(10, 5), columns=["A", "B", "C", "D", "E"]) color = { "boxes": "DarkGreen", "whiskers": "DarkOrange", "medians": "DarkBlue", "caps": "Gray", } df.plot.box(color=color, sym="r+")
此外,还可以传递matplotlib箱线图支持的其他关键字。例如,可以通过vert=False和positions关键字绘制水平和自定义定位箱线图。
df.plot.box(vert=False, positions=[1, 4, 5, 6, 8])
现有接口仍然可以使用DataFrame.boxplot:
df.boxplot()
可以使用by关键字参数创建分层箱线图来创建分组。例如,
df = pd.DataFrame(np.random.rand(10, 2), columns=["Col1", "Col2"]) df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"]) plt.figure(); bp = df.boxplot(by="X")
还可以传递要打印的列子集,以及按多个列分组:
df = pd.DataFrame(np.random.rand(10, 3), columns=["Col1", "Col2", "Col3"]) df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"]) df["Y"] = pd.Series(["A", "B", "A", "B", "A", "B", "A", "B", "A", "B"]) plt.figure(); bp = df.boxplot(column=["Col1", "Col2"], by=["X", "Y"])
用DataFrame.plot.box()也是一样的:
df = pd.DataFrame(np.random.rand(10, 3), columns=["Col1", "Col2", "Col3"]) df["X"] = pd.Series(["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"]) plt.figure() bp = df.plot.box(columns=["Col1", "Col2"], by="X")
在箱线图中,返回类型可以由return_type,关键字控制。有效选项是{“axes”、“dict”、“both”、“None}。镶嵌面,由DataFrame.boxplot创建by关键字的箱线图也会影响输出类型:
np.random.seed(1234) df_box = pd.DataFrame(np.random.randn(50, 2)) df_box["g"] = np.random.choice(["A", "B"], size=50) df_box.loc[df_box["g"] == "B", 1] += 3 bp = df_box.boxplot(by="g")
上面的子地块首先由数字列分割,然后由g列的值分割。下面的子地块首先由g值分割,然后由数字列分割。
bp = df_box.groupby("g").boxplot()
二、面积填充图
可以使用Series.plot.area()和DataFrame.plot.area()创建面积图。默认情况下,面积图是堆叠的。要生成堆叠面积图,每列必须全部为正值或全部为负值。
当输入数据包含NaN时,它将自动由0填充。如果要使用不同的值进行删除或填充,调用plot之前可以使用DataFrame.dropna()或DataFrame.fillna()。
代码如下(示例):
df = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"]) df.plot.area();
要生成未堆叠的绘图,请传递stacked=False。Alpha值设置为0.5。
df.plot.area(stacked=False);
三、散点图
可以使用DataFrame.plot.scatter()方法绘制散点图,散点图需要x轴和y轴的数字列。这些可以由x和y关键字指定。
df_flow_mark.plot.scatter(x='日期',y='客流量')
要在单个轴上绘制多个列组,可以重复指定目标轴的打印方法。建议指定颜色(color)和标签(label)关键字以区分每个组。
df = pd.DataFrame(np.random.rand(50, 4), columns=["a", "b", "c", "d"]) df["species"] = pd.Categorical( ["setosa"] * 20 + ["versicolor"] * 20 + ["virginica"] * 10 ) ax = df.plot.scatter(x="a", y="b", color="DarkBlue", label="Group 1") df.plot.scatter(x="c", y="d", color="DarkGreen", label="Group 2", ax=ax);
关键字c可以作为列的名称,为每个点提供颜色:
df.plot.scatter(x="a", y="b", c="c", s=50);
如果将分类列传递给c,则将生成一个离散的颜色条:
df.plot.scatter(x="a", y="b", c="species", cmap="viridis", s=50);
可以传递matplotlib.scatter支持的其他关键字。下面的示例显示了一个气泡图,它使用DataFrame的一列作为气泡大小。
df_flow_mark.plot.scatter(x='日期',y='客流量',s=df_flow_mark['湿度']*200)