我是靠谱客的博主 甜甜手套,最近开发中收集的这篇文章主要介绍数据可视化之pandas绘图解决绘图中乱码问题Pandas中的绘图类型参看文档,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

解决绘图中乱码问题

plt.rcParams['font.sans-serif']=['Simhei']   # 解决中文乱码问题
plt.rcParams['axes.unicode_minus']=False   # 解决坐标轴刻度负号乱码

Pandas中的绘图类型

  • Pandas通过标准约定来引用matplotlib API来实现更便捷的绘图方法。pandas的Series和DataFrame都自带绘图方法
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(8, 4))  # 设置图片大小,单位为英寸

线图line

Series作图

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2018', periods=1000))
ts = ts.cumsum()
ts.head()

生成的Series如下:

2018-01-01   -0.218622
2018-01-02    0.800360
2018-01-03    1.032471
2018-01-04    0.770278
2018-01-05   -0.754439
Freq: D, dtype: float64
plt.figure(figsize=(8,4))
ts.plot();
  • 图表的横坐标是双坐标
    在这里插入图片描述

Series画图的参数说明

参数说明
kind可以使‘line’线图(默认);’bar’垂直柱状图; ’barh’水平柱状; 'hist’直方图; 'box’箱线图; 'kde’或者’desity’密度图; 'area’区域图; 'scatter’散点图;‘hexbin’六角形图; pie’饼图
figsize元组形式表示图的大小,单位为英寸
use_index是否用索引作x轴,默认为True
title标题
grid是否显示网格,默认为None
legend是否显示图例,False/True/‘reverse’
label用于图例的标签
axSubplot对象,默认为当前对象
style传给matlibplot的风格字符串,如’ko–’;list或dict的形式表示每列的style
alpha图表的填充不透明度(0-1之间)
xtickX轴刻度值
xlimX轴界线,如[0,100]

  • s.plot(kind=‘line’) 等价于 s.plot.line()
  • s.plot(kind=‘bar’) 等价于 s.plot.bar()
  • s.plot(kind=‘hist’) 等价于 s.plot.hist()
ts.plot.line()   # 图形与上图一样

DataFrame 作图

df = pd.DataFrame(np.random.randn(100, 4).cumsum(0), columns=list('ABCD'), index=np.arange(0, 100, 1))
df.head()

生成的DaraFrame如下:


		A			B			C			D
0	0.408464	0.122632	1.285822	-0.074799
1	0.174366	-0.839241	0.791051	1.290122
2	-0.365918	-1.897591	-0.687835	0.081802
3	1.696604	-1.908418	-1.002529	-0.308029
4	2.693575	-2.039872	-1.726345	0.863233
df.plot();

在这里插入图片描述

DataFrame画图及其参数说明

DataFrame还有一些用于对列进行灵活处理的选项,例如,要将所有列都绘制到一个subplot中还是创建各自的subplot。参数如下表:

参数说明
subplots将各个DataFrame列绘制到单独的subplot中
sharex如果subplots=True,则共用同一个X轴,包括刻度和界限
sharey类似于上
figsize表示图像大小的元组
title表示图像标题的字符串
legend添加一个subplot图例(默认为True)
sort_columns以字母表顺序绘制各列,默认使用前列顺序
df.plot(subplots=True,
		# layout = (2,3),
		figsize = (12,6),
		# sharex = False
		);

在这里插入图片描述

直方图hist

np.random.seed(2017)
s = pd.Series(np.random.randn(1000))
s.plot(kind='hist',
	   figsize=(5,3), 
	   ylim=[0,300],
	   bins = 20);
data = pd.Series(np.random.randn(1000))
data.hist(by = np.random.randint(0,6,1000),figsize = (6,4));

在这里插入图片描述

饼图pie

s = pd.Series(np.random.randint(70, size=5), index = ['CN', 'US', 'UK', 'IN', 'CA'])
plt.figure(figsize=(4, 4))  # 饼图是圆的!
s.plot(kind='pie', 
	   label=' ',
	   title='% of revenue by Country', 
	   legend=False,
       colors=['r', 'g', 'b', 'c', 'y'], 
       fontsize=12, 
       figsize=(4, 4), 
       autopct='%.2f');

在这里插入图片描述
: 如果传入的数据和小于1,则画出来是半圆

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

在这里插入图片描述

条形图bar

Series做条形图

s = pd.Series(np.random.randn(10).cumsum(), index = range(0,100,10))
s = s * -1
s.plot(kind='bar', alpha=0.7)  # alpha表示图的透明度
plt.show()

在这里插入图片描述

data = pd.Series(np.random.randn(16), index=list('abcdefghijklmnop'))

fig, axes = plt.subplots(2, 1, figsize=(8,6))
data.plot(kind='bar', ax=axes[0], color='k', alpha=0.5)
data.plot(kind='barh', ax=axes[1], color='k', alpha=0.7)
plt.show()

在这里插入图片描述

DataFrame做条形图

df = pd.DataFrame(np.random.randn(10, 4).cumsum(0), columns=list('ABCD'), index=np.arange(0, 100, 10))
df.plot(kind = 'barh', 
		# title = "% of revenue by Country",
		# alpha = 0.5,
		stacked = True,
		# grid = True);

在这里插入图片描述

区域图area

s = pd.Series(np.random.rand(10).cumsum())
s.plot(kind = "area", 
		title = "% of revenue by Country",
		stack = True)

在这里插入图片描述

密度图kde

s.plot(kind = "kde",title = "% of revenue by Country");

在这里插入图片描述

箱线图box

df = pd.DataFrame(np.random.rand(10,5),columns = ["A","B","C","D","E"])
df.plot(kind = "box");

在这里插入图片描述

color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')
df.plot(kind = "box",
		color=color, 
		# vert = False,
		# positions = [1,4,5,6,8],
		sym='r+');

在这里插入图片描述

散点图scatter

df = pd.DataFrame(np.random.rand(50,4),columns = ['a','b','c','d'])
df.plot(kind = "scatter",
		x = 'a',
		y = 'b',
		s = df['c']*200);  # 点的大小
		
  • ax : Subplot对象,默认为当前对象
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);

在这里插入图片描述

六角形hexbin

  • 数据过于密集,无法单独绘制每一个点,那么Hexbin是一个不错的选择
df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df['b'] = df['b'] + np.arange(1000)
df.plot(kind = 'scatter',x = 'a',y = 'b')

在这里插入图片描述
图片中的点过于密集而无法反应数据间的关系,此时将图形调整为hexbin

df.plot(kind = '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['z'] = np.random.uniform(0, 3, 1000)
df.plot.hexbin(x='a', y='b', C='z', reduce_C_function=np.max, gridsize=25); # 将C的只作为每一个hexagons颜色深浅的计算值,默认计算函数是count

在这里插入图片描述

双坐标图

  • 一般在图表中有两个系列及其以上的数据,并且他们的量纲不同或者数据差别很大时,AI同一纵坐标轴下无法很好地展现原本的面貌,这时就采用双坐标图来绘制。
df = pd.DataFrame(np.random.rand(10, 2), columns=["left", "right"])
df["left"] *= 100
df.plot(kind = 'bar')

在这里插入图片描述

第一种方法

ax = df.plot(kind = 'bar')
ax2 = ax.twinx()
for r in ax.patches[len(df):]:
	r.set_transform(ax2.transData)
ax2.set_ylim(0,1.5)

在这里插入图片描述

df = pd.DataFrame(np.random.randn(100, 4).cumsum(0), columns=list('ABCD'), index=np.arange(0, 100, 1))

第二种方法

df.A.plot()
df.B.plot(secondary_y=True, style='g');

第三种方法

df.plot(secondary_y=['A', 'B'],
#         mark_right=False,  # To turn off the automatic marking
#         legend=False
       );
  • 将图像答应在对角线上
fig, axes = plt.subplots(4, 4, figsize=(6, 6));

plt.subplots_adjust(wspace=0.5, hspace=0.5)
target1 = [axes[0][0], axes[1][1], axes[2][2], axes[3][3]]
df.plot(subplots=True, ax=target1, legend=False, sharex=False, sharey=False);

在这里插入图片描述

将数据表格打印在图上

fig, ax = plt.subplots(1, 1)
df = pd.DataFrame(np.random.rand(5, 3), columns=['a', 'b', 'c'])
ax.get_xaxis().set_visible(False)   # Hide Ticks
df.plot(table=True,
		# table = np.round(df.T,2),
		 ax=ax);

在这里插入图片描述

from pandas.plotting import table
fig, ax = plt.subplots(1,1)
table(ax, np.round(df.describe(),2),
	  loc = 'upper center',
	  # loc = 'upper right',
	  colWidths = [0.3,0.2,0.2])
df.plot(ax = ax,ylim = (0,2),legend = 'best');

在这里插入图片描述

参看文档

Pandas数据可视化

最后

以上就是甜甜手套为你收集整理的数据可视化之pandas绘图解决绘图中乱码问题Pandas中的绘图类型参看文档的全部内容,希望文章能够帮你解决数据可视化之pandas绘图解决绘图中乱码问题Pandas中的绘图类型参看文档所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部