python学习笔记第8章:数据可视化(matplotlib,pyecharts)

1.1.1 模板
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib;matplotlib.use('TkAgg') #图形界面
#0.数据定义
plt.rcParams['font.sans-serif']='SimHei' #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示
%matplotlib inline #图表直接展示在Jupyter Notebook
%config InlineBackend.figure_format=’svg’ #矢量图格式
src = r'C:\Users\用户名\Documents\tmp\read.csv'
df = pd.read_csv(src,encoding='gbk')
#2.执行
plt.subplot(1,2,1) #创建1行两列共两个图,选取第一个
plt.bar(df['项目'],df['金额']) #绘制条形图,数据分别x轴,y轴
plt.title('上年开销',loc='right') #设置标题并靠右,缺省center
plt.xlabel('《项目》') #设置X轴名称
plt.ylabel('金额') #设置Y轴名称
for a,b in zip(df['项目'],df['金额']): #把数值展现到图上
plt.text(a,b,b,ha='center',va= 'bottom',fontsize=11)
plt.subplot(1,2,2) #1行两列共两个图,选取第二个
plt.pie(df['金额'],labels=df['项目'],autopct='%.0f%%')
#绘制饼图,先数字,后文本,以百分比显示在图上,不加的话图上是空白
plt.show() #展示出来
1.1.2 建立画布
#add_subplot方式需要,其他不用,如果设置画布大小,可能会用到
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib;matplotlib.use('TkAgg') #图形界面
plt.rcParams['font.sans-serif']='SimHei' #中文字体使用SimHei
plt.rcParams['axes.unicode_minus'] = False #解决负号无法显示
%matplotlib inline #图表直接展示在Jupyter Notebook
%config InlineBackend.figure_format=’svg’ #矢量图格式
#plt.rcParams.keys() #查看可用设置(字体等很多
#plt.style.available #查看可用样式
#plt.style.use(样式名) #使用某个样式
fig = plt.figure() #建立画布
fig = plt.figure(figsize=(8,8)) #建立画布并指定大小
1.1.3 建立坐标系
#一个坐标系中可叠加多个类型的图
直接使用(用于只有一个坐标系)
plt.plot(x,y) #类型为列表
add_subplot方法
ax1 = fig.add_subplot(1,1,1) #建立一行一列一个坐标系,选择第一个
ax2= fig.add_subplot(2,1,1) #建立两行一列两个坐标系,选择第一个
plt.subplot方法
ax1 = plt.subplot(2,3,1) #建立两行三列六个坐标系,选择第一个
ax2 = plt.subplot(2,3,2) #建立两行三列六个坐标系,选择第二个
ax1.plot(x,y) #x轴数据用x。y轴数据用y,画折线图
ax1.bar(x,y) #同时在ax1中画柱形图
plt.subplots方法(要用上面的fig)
fig,axes = plt.subplots(2,2) #建立两行两列四个坐标系
axes[0,0].plot(xy) #0,0坐标系画折线图
图表参数
color= #颜色b蓝,y黄,c青,m品红,w白,k黑
linestyle #solid实线,dashed短线,dotted点,dashdot短线和点
linewidth=3 #线宽度,浮点数
marker=’.‘ #折线图中每个点的形状
markersize #每个点大小
markerfacecolor #标记实心颜色
markeredgecolor #标记外边颜色
markeredgewidth #标记外边宽度
label #图例
图表类型
plot 折线图
bar 柱形图
pie 饼图或圆环图
barh 条形图 #
scatter 散点图或气泡图
stackplot 面积图
polar 雷达图
boxplat 箱形图
imshow 热力图
1.1.4 绘图选项
设置标题
plt.title('上年开销',loc='right') #设置标题并靠右,缺省center
填充色
plt.fill(x,y,color=’r’) #使用指定颜色填充区域
c2线
plt.grid(True) #显示全部c2线
plt.grid(True,axis=’x’) #只显示X轴c2线
plt.grid(True,linestyle=’dashed’) #使用虚线
plt.grid(b = ‘True’) #显示全部c2线
plt.grid(b = ‘True’,axis=’x’) #只显示X轴c2线
plt.grid(b = ‘True’,axis=’y’) #只显示Y轴c2线
数据标签
for a,b in zip(X轴数据,Y轴数据):
plt.text(a,b,b,ha=’center’,va=’bottom’,fontsize=11)
标签用y轴的数据,即b
ha:水平位置,left,right
va:垂直位置,top,bottom,center
fontsize:字体大小
水平线
plt.axhline(y =2 ,xmin=1,xmax=5)
#平行于x轴,高度2,长度从1到5
垂直线
plt.axhline(x=2 ,ymin=1,ymax=2)
数据表
columns=[‘c1,’c2’,’c3’] #列名
rows= [‘r1’,’r2’] #行名,第一列
celltext = [ [231,233,678],
[125,235,666]] #数据行,两行数据
plt.table(cellText=celltext, #数据
cellLoc=’center’, #位置
rowLabels=rows, #行
rowLoc=’center’,
colLabels=columns,
cloLoc=’left’,
rowColours=[‘red’,’yellow’], #行名颜色,逐个指定
colColours=[‘red’,’yellow’,’red’], #列名颜色
loc=’bottom’) #数据表位置
设置图例
ax1.plot(x,y,lable=’柱形图’) #建坐标系时使用label参数
ax1.legend() #将图例显示出来
ax1.legend(ncol=2) #有多个图例时,默认展示在一列,ncol设置列数
ax1.legend(loc = ‘best’) #loc参数指定图例位置,best自动
upper right #右上
lower left #左下
center left #左侧中心
upper center #顶部中心
center #正中心
其他参数
fontsize
prop
facecolor 背景色
edgecolor 边框颜色
title 标题
title_fontsize 标题大小
shadow 阴影
1.1.5 坐标轴设置
坐标轴名称;
plt.xlabel('项目') #设置X轴名称
plt.ylabel('金额') #设置Y轴名称
plt.xlabel('项目',lablepad= 10) #设置X轴名称到x轴的距离
lablepad= 10 #名称到轴的距离
fontsize=’xx-large’ #大字体
color=’#123456’ #字体颜色
fontweight=’bold’ #字体加粗
设置坐标轴位置
默认坐标轴是4个边框,左边和下边的边框显示数值,用下面的方法改为4个象限
方法一:
x =np.arange(-10,10,0.1)
y = np.sin(x)
ax1 = plt.subplot(111)
ax1.plot(x,y)
ax1.spines['left'].set_position(('data',0)) #左边框位置移到0,y轴
ax1.spines['bottom'].set_position(('data',0)) #下边框位置0,x轴
ax1.spines['left'].set_color('r') #设置左边框(x轴)颜色
ax1.spines['top'].set_visible(False) #隐藏上边框
ax1.spines['right'].set_visible(False)
plt.show()
方法二:可能只适用一个坐标系的情况
x =np.arange(-10,10,0.1)
y = np.sin(x)
plt.plot(x,y) #直接建坐标系
ax = plt.gca() #这行是重点,下面没区别
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_color('r')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.show()
坐标轴刻度范围
plt.xlim(0,12) #x轴最小值0,最大12
坐标轴刻度值和标签
默认刻度为数值,可自定义。坐标轴名称中的文本设置均可用
plt.xticks(列表1,列表2) #列表一刻度值,列表二标签
plt.yticks(列表1,[‘一月’,’二月‘])
plt.yticks([1,2],[‘一月’,’二月‘])
坐标轴刻度值位置
ax1.xaxis.set_ticks_position(‘bottom’) #x轴刻度值显示在x轴下方,缺省
ax1.yaxis.set_ticks_position(‘left’) #y轴刻度值显示在y轴左侧,缺省
不显示刻度值和标签
plt.xticks([])
坐标轴等长
ax2.axis('square') #两个轴范围相同
ax.axis('equal') #两个轴刻度等长
不显示X轴和Y轴
plt.axis(‘off’)
双坐标轴
在设置好第一个坐标轴后,输入以下语句,然后同样的方法再绘制一个,参数都一样
plt.twinx() #双y轴
plt.twiny() #双x轴
1.1.6 收尾
保存图片
plt.savefig(src,facecolor=’w’) #背景色黑
展示图片
plt.show( )
1.1.7 常用图形
圆(极坐标)
theta = np.arange(0 , 2*np.pi , 0.0001)
x = 2*np.cos(theta)
y = 2*np.sin(theta)
ax1 = plt.subplot(111)
ax1.plot(x,y)
ax1.spines['left'].set_position(('data',0))
ax1.spines['bottom'].set_position(('data',0))
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.axis('equal') #等长
圆(方程)
x = np.arange(-2,2,0.0001)
y = np.sqrt(2-x**2)
ax1 = plt.subplot(111)
ax1.plot(x,y)
ax1.plot(x,-y)
ax1.spines['left'].set_position(('data',0))
ax1.spines['bottom'].set_position(('data',0))
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.axis('equal')
ax1.fill(x,y,color='r') #红色填充
ax1.fill(x,-y,color='r')
8.2绘图seaborn
8.3绘图pyecharts
from pyecharts.charts import Bar
from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.globals import ThemeType #主题,内置主题类型可查看 pyecharts.globals.ThemeType
# 使用 snapshot-selenium 渲染图片
#from pyecharts.render import make_snapshot
#from snapshot_selenium import snapshot
src = r'C:\tmp\2.html'
x_data = ["1月", "2月", "3月", "4月", "5月", "6月"]
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) #bar柱状图, 并设置主题
.add_xaxis(xaxis_data=x_data) #横坐标
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) #纵坐标
.add_yaxis("商家B", [15, 6, 45, 20, 35, 66])
.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"), #可以没有标题
toolbox_opts=opts.ToolboxOpts(), #添加右侧工具栏
xaxis_opts=opts.AxisOpts(name="我是 X 轴"), #坐标轴起个名字
)
)
y_data = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2]
y_data = [i*10 for i in y_data]
line = (
Line()
.add_xaxis(xaxis_data=x_data) #横坐标数据
.add_yaxis(series_name='气温',y_axis=y_data,color="#675bba") #纵坐标数据,配置颜色,series_name可省略
)
bar.add_js_funcs("""var img = new Image(); img.src = 'https://s2.ax1x.com/2019/07/08/ZsS0fK.jpg';""") #背景图片
#bar.render(src) #生成html页面,并指定路径,缺省当前python文件目录
bar.overlap(line) #叠加折线图和柱状图,
bar.render(src) #生成html
#bar.render_notebook() #使用jupter
#make_snapshot(snapshot, bar.render(), "bar.png") #生成图片

浙公网安备 33010602011771号