python-可视化02-图表辅助元素

var code = "cddabbcd-a7ff-4fb4-9ea9-141865dec975"

一、图表辅助元素的定制

1.1 认识常用元素

标签 ---- label
文本 ---- text(注释|标签)
坐标轴 ---- 标签+刻度

1.2 设置坐标轴的标签、刻度范围、刻度标签

1.2.1 坐标轴的标签

xlabel 横轴标签
ylabel 纵轴标签
案例: 绘制正弦案例

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #显示负数
x = np.linspace(0,2*np.pi,500)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel('弧度')
plt.ylabel('sin(x)')
plt.show()

在这里插入图片描述

1.2.2坐标轴刻度范围

x轴和y轴的刻度范围:xlim(min,max) ylim(min.max)

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #显示负数
x = np.linspace(0,2*np.pi,500)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel('弧度')  # 横坐标标签
plt.ylabel('sin(x)')  # 纵坐标标签
plt.ylim(-1.5,1.5)  # 设置y轴上下限数据(最小,最大)
plt.show()

在这里插入图片描述
如果使用画轴需要用下面方法
ax.set_xlabel(“弧度”) ###set_xlabel()
ax.set_ylabel(“sin(x)”) ###set_ylabel()
ax.set_ylim(-1.5,1.5)

1.2.3 刻度标签设置

刻度的定义:yticks 和 xticks
使用画轴之后
需要使用set_yticks 和 set_xticks
xticks([原有点的列表],[新定义的点的列表])

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #显示负数
x = np.linspace(0,2*np.pi,500)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel('角度')  # 横坐标标签
plt.ylabel('sin(x)')  # 纵坐标标签
plt.ylim(-1.2,1.2)  # 设置y轴上下限数据(最小,最大)
plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,np.pi*2],
			['0°','90°','180°','270°','360°']) # 更改刻度标签
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #显示负数
x = np.linspace(0,2*np.pi,500)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel('角度')  # 横坐标标签
plt.ylabel('sin(x)')  # 纵坐标标签
plt.ylim(-1.2,1.2)  # 设置y轴上下限数据(最小,最大)
plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,np.pi*2],
           ['0',r'$\pi/2$',r'$\pi$',r'$3\pi/2$',r'$2\pi$']) # 更改刻度标签
plt.show()

在这里插入图片描述

1.3 标题和图例

1.3.1 标题

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #显示负数
x = np.linspace(0,2*np.pi,500)
y = np.sin(x)
fig = plt.figure(figsize=(12,4)) # 使用画布
ax = fig.add_subplot(111) # 使用画轴
ax.plot(x,y) # 在画轴上画图
ax.set_xlabel("弧度")  ###set_xlabel()
ax.set_ylabel("sin(x)") ###set_ylabel()
ax.set_ylim(-1.2,1.2)  # 设置y轴上下限数据(最小,最大)
ax.set_xticks([0,np.pi/2,np.pi,3*np.pi/2,np.pi*2],
           ['0',r'$\pi/2$',r'$\pi$',r'$3\pi/2$',r'$2\pi$']) # 更改刻度标签
ax.set_title("sin图表")
plt.show()

在这里插入图片描述

案例

数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd
import json

plt.rcParams['font.sans-serif'] = ['SimHei']
f = open('2020year.json','r',encoding='utf8')
data = json.load(f)
df = pd.DataFrame(data['data']['list'])
y = df['box'].astype('float')[:10]/10000   #转换类型,取前十个,并除以10000作为亿元单位
x = df['movieName'][:10]
plt.barh(x,y)
plt.title('2020年票房前十条形图')
plt.ylabel('电影名称')
plt.xlabel('总票房(亿元)')
plt.show()

在这里插入图片描述

1.3.3 图例

plt.legend()  或 ax.legend()
核心是:每个图都标记label,才能显示图例
不标记label就会显示为空

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/60d34e4bbafd4db7ac3560694faf17ab.png在这里插入图片描述

其他属性
位置的设置:
		legend(loc="upper right")   里面写位置参数
		legend(bbox_to_anchor[x,y])  x和y表示图的坐标点
									[0,0]表示图的左下
									[0,1]表示图的左上
									[1,0]表示图的右下
									[1,1]表示图的右上
frameon=False   去掉方框
案例1

数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
data = pd.read_excel('第2章.xlsx',sheet_name='4-1')

y = data['平均成绩(男)']
y1 = data['平均成绩(女)']
x = np.arange(len(data))
plt.bar(x-0.2,y,width=0.4,label="平均成绩(男)")
plt.bar(x+0.2,y1,width=0.4,label="平均成绩(女)")
plt.xticks(x,data['学科'])
plt.legend()
plt.title('各科男女成绩')
plt.ylabel('成绩')
plt.xlabel('学科')
plt.show()

在这里插入图片描述

案例2

数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('2-5.xlsx')

label = df['分类']
data = df['金额']
plt.pie(data,labels=label,autopct="%.2f%%",pctdistance=0.7)
plt.legend(bbox_to_anchor=[1.3,1.1])
plt.show()

在这里插入图片描述

1.4 网格线

grid(axis)
axis:默认值 both   或者改成  'x':根据x轴刻度画竖线 
 											  'y':根据y轴刻度画横线

案例1

数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_excel('2-4.xls',index_col=0)
x = np.arange(len(df))
plt.bar(x-0.25,df['A公司'],width=0.25,label="A公司")
plt.bar(x,df['B公司'],width=0.25,label="B公司")
plt.bar(x+0.25,df['C公司'],width=0.25,label="C公司")
plt.xticks(x,df.index)
plt.ylabel('销售额')
plt.xlabel('月份')
plt.legend()
plt.grid(axis='y',  # 网格,axis='y'按y轴刻度画网格
         linestyle="-.",color="b",  # 线的样式和颜色
         linewidth=0.6,alpha=0.3)   # 线的宽度和线的透明度(0是完全透明,1是不透明)
plt.show()

在这里插入图片描述


案例2

数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_excel('2-6.xls')
x = df['车速(km/h)']
y = df['制动距离(m)']
plt.scatter(x,y)
plt.title('汽车速度与制动距离关系')
plt.xlabel('速度(km/h)')
plt.ylabel('制动距离(m)')
plt.xticks(x)
plt.grid(linestyle="-.",color="r",linewidth=0.6,alpha=0.3)
plt.show()

在这里插入图片描述

1.5参考线

axhline ax是axis的缩写,h是水平的缩写
后面可以加上线的样式
在这里插入图片描述
在这里插入图片描述
axvline ax是axis的缩写,v是垂直的缩写
在这里插入图片描述
axhspan ax是axis的缩写,h是水平的缩写 span是区域
axvspan ax是axis的缩写,v是垂直的缩写 span是区域
在这里插入图片描述

案例

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False # 用来显示负号
x = np.linspace(-(np.pi),np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,label='正弦')
plt.plot(x,y2,label='余弦')
plt.xlim(x.min()*1.5,x.max()*1.5)
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
           [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.title('正弦和余弦')
plt.legend()
plt.grid(axis='y')
plt.axhline(y=0.68,linestyle=":",alpha=0.5,color="r")
plt.axvline(x=-1,linestyle=":",alpha=0.5,color="g")
plt.axhspan(0,0.4,color="y",alpha=0.3)
plt.axvspan(0.2,1.5,color="g",alpha=0.3)
plt.show()

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/83e91ceb202b4ffba1d0c75c22845869.png

注释文本

指向性注释文本

annotate(s,xy,xytext) 	
必须写的参数,不需要写参数名
									s是string的缩写:注释的文本内容(例如:最小值)。
									xy是注释点的位置,箭头指向的点
									xytext是书写文本的点。也是指向性箭头的起点
arrowprops:箭头的属性的字典
		arrowprops={"arrowstyle":"-|>","color":"red","linestyle":"-."}

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1c2a506d1e344ac89f7957ba705fa67c.png

数字标签(无指向性注释文本)

优点:代码简单
缺点:一般都是很多个数据,需要用for循环画出来

text(x,y,s,其他参数)
			x,y  写字点的坐标     s是 string 的缩写,写内容的
			其他参数:horizotalalignment  水平对齐方式(缩写为ha)
			                  verticalalignment    垂直对齐方式(缩写va)
			                  对齐方式的值:"center" "left" "right" 
			                  							"center" "top"  "bottom" "baseline"
			                  fontdict:字体的格式的定义

案例
数据格式
在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False # 用来显示负号
df = pd.read_excel("2-2.xlsx")
plt.bar(df['财年'],df['GMV'])
plt.ylim(0,62000)
for i in range(len(df)):
    plt.text(df['财年'][i],df['GMV'][i]+1200,df['GMV'][i],ha="center")
plt.show()

在这里插入图片描述

添加表格

table(cellText,rowLabels,colLabels,loc,colWidths,cellLoc)
必写:
cellText:表格中的数据的值,是二维数组的格式[[6,6,6],[8,8,8]]
如果表格只有一行或者一列,仍然是二维数据的格式
一行:[[200,600,100,600]]
一列:[[200],[600],[100],[600]]
rowLabels:每一行的标题,一维数组   ["第一行","第二行"]
colLabels:每一列的标题,一维数组  ["第1列","第2列","第3列"]
loc:表格显示的位置 ,默认填满整个底
colWidths
cellLoc
非必写:

案例

1. 复习1

数据格式
在这里插入图片描述

import matplotlib.pylab as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']

plt.figure(figsize=(10,4))
df = pd.read_excel('9月份天气.xls')
plt.plot(df['日期'],df['最高气温'],"*--b",label="最高气温")
plt.plot(df['日期'],df['最低气温'],"X:y",label="最低气温")
plt.xlabel('9月份日期') #x轴标签
plt.ylabel('温度(°C)') #y轴标签
plt.title('9月4日~18日气温走势') #标题
plt.legend() #图例
plt.grid(alpha=0.4) #网格
plt.axhspan(ymin=20,ymax=28,alpha=0.3) #参考区域,需要使用透明度
for i in range(len(df)):
    plt.text(df['日期'][i],df['最高气温'][i]+0.5,df['最高气温'][i],ha="center")
    plt.text(df['日期'][i], df['最低气温'][i]+0.5, df['最低气温'][i], ha="center")
plt.annotate("最高温度",("6日",34),("6日",30),arrowprops={"arrowstyle":"-|>"})
plt.annotate("最高温度",("7日",34),("6日",30),arrowprops={"arrowstyle":"-|>"})
plt.annotate("最低温度",("15日",14),("15日",17),arrowprops={"arrowstyle":"-|>"})

plt.show()

在这里插入图片描述

复习2

import matplotlib.pylab as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
data = np.random.randint(1,10,100)
plt.hist(data,bins=(0,1,3,4,5,7,9,11),
         color='r',alpha=0.4,edgecolor="black",label='y=nx')
plt.legend()
plt.show()

在这里插入图片描述

复习3

import matplotlib.pylab as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

lab=['面粉','砂糖','奶油','草莓酱','坚果']
data1=[40,15,20,10,15]
data2=[30,25,15,20,10]
plt.pie(data1,autopct="%.1f%%",pctdistance=0.85,labels=lab,
        wedgeprops={"width":0.3,"edgecolor":"w"},
        colors=['b','g','r','orange','pink']
        )
plt.pie(data2,autopct="%.1f%%",pctdistance=0.75,radius=0.7,
        wedgeprops={"width":0.3,"edgecolor":"w"},
        colors=['b','g','r','orange','pink']
        )
plt.legend(bbox_to_anchor=(0.95,0.9),title="ingredient ratio")
plt.show()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SKY慕雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值