可视化之如何用pandas绘制简单的图形
0. 简介
python中常用的绘图库除了matplotlib、seaborn之外,数据处理库pandas也能画图,本文就主要介绍如何使用pandas画图。
pandas主要是通过 pandas.DataFrame.plot()
来完成绘图,因此我们先来了解此函数的各个参数,然后通过实例进行演示。
1. pandas.DataFrame.plot()参数
参数:
DataFrame.plot(data, x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None,figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
xerr=None,secondary_y=False, sort_columns=False, include_bool=False, **kwds)
解释:
总体相关参数
Parameters:
data: series或DataFrame格式 #可以通过pd.DataFrame.plot(data)调用,也可以通过data.plot(),此时就不需要传入data参数。
x : label or position, default None # x轴的数据,只有当数据为DataFrame才传入,可以是列名或列的位置,不传入的话,默认是DataFrame的索引
y : label or position, default None # y轴的数据,只有当数据为DataFrame才传入,可以是列名或列的位置,不传入的话,默认是DataFrame的所有列
kind : str # 绘制图形的种类
‘line' : line plot (default)#折线图
‘bar' : vertical bar plot#条形图
‘barh' : horizontal bar plot#横向条形图
‘hist' : histogram#直方图
‘box' : boxplot#箱线图
‘kde' : Kernel Density Estimation plot#Kernel 的密度估计图,主要对柱状图添加Kernel 概率密度线
‘density' : same as ‘kde'
‘area' : area plot#不了解此图
‘pie' : pie plot#饼图
‘scatter' : scatter plot#散点图,只有数据为DataFrame格式才能传入此参数
‘hexbin' : hexbin plot#不了解此图,只有数据为DataFrame格式才能传入此参数
子图相关参数
ax : matplotlib axes object, default None # An axes(轴) of the current figure**子图(axes, 也可以理解成坐标轴) 要在其上进行绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot**其中,变量和函数通过改变figure和axes中的元素(例如:title,label,点和线等等)一起描述figure和axes,也就是在画布上绘图。
subplots : boolean, default False # Make separate subplots for each column,就是说当设置subplots=True时,会为每列制作单独的子图
sharex : boolean, default True if ax is None else False # 如果有子图,子图共x轴刻度、标签
sharey : boolean, default False#如果有子图,子图共y轴刻度,标签
layout : tuple (optional) # (rows, columns) for the layout of subplots,子图的行列布局
图片相关参数
figsize : a tuple (width, height) in inches # 图片尺寸大小
use_index : boolean, default True # Use index as ticks for x axis,默认用索引做x轴
title : str or list # 标题。如果传入了list而且subplots=True,为每个子图设置标题
grid : boolean, default None (matlab style default) #图片是否有网格
legend : #子图的图例,添加一个subplot图例(默认为True)
style : list or dict # The matplotlib line style per column,每列图线的类型
x, y轴相关设置
logx : bool or ‘sym', default False # Use log scaling or symlog scaling on x axis,设置x轴刻度是否取对数或symlog(定义一个接近零的值范围,在该范围内绘图是线性的,以避免使绘图趋于零附近的无穷大。)
logy : bool or ‘sym', default False # Use log scaling or symlog scaling on y axis
loglog : bool or ‘sym', default False#同时设置x,y轴刻度是否取对数
xticks : sequence # Values to use for the xticks,设置x轴刻度值,序列形式(比如列表)
yticks : sequence # Values to use for the yticks,设置y轴刻度,序列形式(比如列表)
xlim : 2-tuple/list # 设置坐标轴的范围,列表或元组形式
ylim : 2-tuple/list # 设置坐标轴的范围,列表或元组形式
xlabel: label, optional # 用于x轴上的xlabel的名称。默认情况下,将索引名称或用于x轴的列名用作xlabel
ylabel: label, optional # 用于y轴上的xlabel的名称。默认情况下,没有索引名称,而是通过legend的形式展示名称
rot : int, default None # Rotation for ticks (xticks for vertical, yticks for horizontal plots), 设置轴标签(轴刻度)的显示旋转度数
fontsize : int, default None # Font size for xticks and yticks,设置轴刻度的字体大小
区域设置
colormap : str or matplotlib colormap object, default None # Colormap to select colors from. If string, load colormap with that name from matplotlib,设置图的区域颜色
colorbar : boolean, optional # If True, plot colorbar (only relevant for ‘scatter' and ‘hexbin' plots) ???
position : float # Specify relative alignments for bar plot layout. From 0 (left/bottom-end) to 1 (right/top-end). Default is 0.5 (center)
table : boolean, Series or DataFrame, default False # 如果为正,则选择DataFrame类型的数据并且转换匹配matplotlib的布局。
# If True, draw a table using the data in the DataFrame and the data will be transposed to meet matplotlib's default layout. If a Series or DataFrame is passed, use passed data to draw a table.
yerr : DataFrame, Series, array-like, dict and str # ???
xerr : same types as yerr. # ???
stacked : boolean, default False in line and bar plots, and True in area plot. #If True, create stacked plot.如果设为真,则为堆叠图,常见于条形图
sort_columns : boolean, default False # 以字母表顺序绘制各列,默认使用前列顺序
secondary_y : boolean or sequence, default False # Whether to plot on the secondary y-axis If a list/tuple, which columns to plot on secondary y-axis, 设置第二个y轴(右y轴)
mark_right : boolean, default True # When using a secondary_y axis, automatically mark the column labels with “(right)” in the legend
include_bool: bool, default is False # If True, boolean values can be plotted
Returns:axes : matplotlib.AxesSubplot or np.array of them
2. 演示
2.1 各种图
参考pandas 常见绘图总结
test_dict = {'销售量':[1000,2000,5000,2000,4000,3000],'收藏':[1500,2300,3500,2400,1900,3000]}
data = pd.DataFrame(test_dict,index=['一月','二月','三月','四月','五月','六月'])
data
销售量 收藏
一月 1000 1500
二月 2000 2300
三月 5000 3500
四月 2000 2400
五月 4000 1900
六月 3000 3000
2.1.1 折线图
普通折线图以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图。
折线统计图不仅可以表示数量的多少,而且可以反映同一事物在不同时间里的发展变化的情况,虽然它不直接给出精确的数据(当然你也可以加上去),但是能够显示数据的变化趋势,反映事物的变化情况。
data.plot(kind='line')
2.1.2 条形图
条形统计图可以清楚地表明各种数量的多少。
普通条形图:
data.plot(kind='bar')
堆积条形图:
data.plot(kind='bar', stacked=True)
2.1.3 横向条形图
data.plot(kind='barh')
2.1.4 直方图
直方图是数值数据分布的精确图形表示,这是一个连续变量(定量变量)的概率分布的估计
test_dict2 = {'泊松分布':np.random.poisson(50,100),'贝塔分布':np.random.beta(5,1,100)*40}
data2 = pd.DataFrame(test_dict2)
data2
泊松分布 贝塔分布
0 40 38.001607
1 50 36.588124
2 53 36.325921
3 49 37.138868
4 59 38.503662
... ... ...
95 52 21.731441
96 48 37.274649
97 59 35.666431
98 60 30.777406
99 50 24.558308
100 rows × 2 columns
data2.plot(kind='hist', subplots=True, bins=20, sharex=False, layout=(1,2))
2.1.5 箱线图
data.plot(kind='box')
2.1.6 核密度图
data2.plot(kind='kde', subplots=True, grid=True)
2.1.7 饼图
data.plot(kind='pie', subplots=True,figsize=(10, 8),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False,colormap='viridis')
此处有一些特殊的参数:
figsize # 图片的大小。
autopct # 显示百分比。
radius # 圆的半径。
startangle # 旋转角度。
colormap # 颜色。
2.1.8 散点图
data.plot(kind='scatter', x=0, y=1)
2.2 x轴ticks方向设置
设置rot=0
,则将ticks方向设置为水平
data.plot(kind='bar', rot=0)
总结
以上为个人经验,希望能给大家一个参考,如果觉得有用的话,希望大家点赞评论收藏。