第四章 图表样式的美化

4.1、图表样式概述
4.1.1、默认图表样式
rc_params()函数返回一个RcParams对象,RcParams对象是一个字典对象,其中字典的键是由配置要素及其属性组成的配置项,值为配置项的默认值。
matplotlib载入时会主动调用rc_params()函数获取包含全部配置项的字典,并将该字典赋值给变量reParams,以便用户采用访问字典RcParams的方式设置或获取配置项。
4.1.2、图表样式修改
1、局部修改:是指通过代码动态地址修改matplotlib配置项,此方式用于满足程序局部定制的需求
2、全局修改:是指直接修改matplotlib配置项。

4.2、使用颜色
4.2.1、使用基础颜色
matplotlib的基础颜色主要有3种表示方式:单词缩写或单词、十六进制或HTML模式、RGB模式
1、单词缩写或单词表示颜色
c:cyan 青色
m:magenta 洋红色
y:yellow 黄色
k: black 黑色
r:red 红色
b: blue 蓝色
2、十六进制或HTML模式表示的颜色
matplotlib支持使用十六进制或HTML/CSS模式表示更多的颜色,它将这些颜色存储在colors.cnames字典中,可以通过 访问colors.cnames字典查看全部的颜色。
3、RGB模式表示的颜色
matplotlib支持使用RGB模式的三元组表示颜色,其中元组的第一个元素代表红色值,第二个代表绿色值,第三元素代表蓝色值,且每一个元素的取值范围均是【0,1】
4.2.2、使用颜色映射表
matplotlib主要有两种使用颜色映射表的方式:第一种方式是调用函数或方法绘制图表或添加辅助元素时将颜色映射表传递给关键字参数cmap;第二种方式是直接调用set_cmap()函数进行设置。
4.2.3、案例1:两个地区对不同种类图书的采购情况
代码如下:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[“font.sans-serif”]=[“SimHei”]
plt.rcParams[“axes.unicode_minus”]=False
x=np.arange(5)
y1=[1200,2400,1800,2030,1700]
y2=[1050,2100,1300,1600,1340]
bar_width=0.6
tick_label=[“家庭”,“小说”,“心理”,“科技”,“儿童”]
fig=plt.figure()
ax=fig.add_subplot(111)
ax.bar(x,y1,bar_width,color="#FFC0CB",align=“center”,label=“地区1”)
#y2在y1条形图上增加一个bottom
ax.bar(x,y2,bar_width,bottom=y1,color="#66CCFF",align=“center”,label=“地区2”)
ax.set_ylabel(“采购数量(本)”)
ax.set_xlabel(“图书种类”)
ax.grid(True,axis=‘y’,color=“gray”,alpha=0.2)
ax.set_xticks(x)
ax.set_xticklabels(tick_label)
ax.legend()
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述
4.3、选择线型
4.3.1、选择线条的类型
在matplotlib中,默认的线条类型是实线。当pyplot绘制折线图、显示网格或添加参考线时,可以将线型的取值传递给linestyle或ls参数,以选择其他的线条类型。
4.3.2、案例2:2017年7月和2019年7月国际交汇市场美元/人民币汇率走势
代码如下:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[“font.sans-serif”]=[“SimHei”]
plt.rcParams[“axes.unicode_minus”]=False
eurcny_2017=np.array([6.5678,6.4567,6.5677,6.3456,6.3467,
6.3244,6.4389,6.4356,6.4565,6.0987,
6.5847,6.5489,6.5894,6.4580,6.3547,
6.7095,6.7890,6.5908,6.7390])
eurcny_2019=np.array([6.8756,6.8495,6.7453,6.8744,6.5979,
6.8976,6.9875,6.7896,6.8745,6.9857,
6.9844,6.9897,6.9856,6.9877,6.9876,
6.8765,6.7890,6.9854,6.9754])
date_x=np.array([3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,24,25,26,31])
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(date_x,eurcny_2017,color=’#006374’,linewidth=2,
label=‘2017年7月美元/人民币汇率’)
ax.plot(date_x,eurcny_2019,color=’#8a2e76’,linestyle=’–’,linewidth=2,
label=‘2019年7月美元/人民币汇率’)
ax.set_xlabel(‘日期’)
ax.set_ylabel(‘汇率’)
ax.legend()
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述
4.4、添加数据标记
在matplotlib中,折线图的线条由数据标记及其之间的连线组成,且默认隐藏数据标记。数据标记一般指代表单个数据的圆点或其他符号等,用于强调数据点的位置,常见于折线图和散点图中。
4.4.1、添加折线图或散点图的数据标记
如图所示:
在这里插入图片描述
pyplot还可以为以下参数传值以控制标记属性:
markeredgecolor或mec:表示标记的边框颜色
markeredgewidth或mew:表示标记的边框宽度
markerfacecolor或mfc:表示标记的填充颜色
markerfacecoloralt或mfcalt:表示标记备用的填充颜色
markersize或ms:表示标记的大小

import numpy as np
import matplotlib.pyplot as plt
plt.plot([1,2,3],[3,4,5],marker=’’,markersize=20,markerfacecolor=‘skyblue’)
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述
4.4.2、案例3:标记不同产品各季度的销售额
代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams[“font.sans-serif”]=[“SimHei”]
plt.rcParams[“axes.unicode_minus”]=False
sale_a=[2144,2534,4457,7697]
sale_b=[897,1214,2354,4556]
sale_c=[153,230,309,609]
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(sale_a,‘D-’,sale_b,’^:’,sale_c,‘s–’)
ax.grid(alpha=0.3)
ax.set_ylabel(‘销售额(万元)’)
ax.set_xticks(np.arange(len(sale_c)))
ax.set_xticklabels([‘第一季度’,‘第二季度’,‘第三季度’,‘第四季度’])
ax.legend([‘产品A’,‘产品B’,‘产品C’])
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述
4.5、设置字体
4.5.1设置字体样式
在这里插入图片描述
在这里插入图片描述
示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1,2,3],[3,4,5])
plt.text(1.9,3.75,‘y=x+2’,bbox=dict(facecolor=‘pink’),family=‘serif’,fontsize=18,fontstyle=‘normal’,rotation=60)
在这里插入图片描述
4.5.2、案例4:未来15天的最高气温和最低气温
代码如下:
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(4,19)
y_max=[32,33,34,35,33,32,35,36,32,29,28,34,33,35,37]
y_min=[21,20,19,18,17,19,17,16,15,10,19,18,17,24,16]
plt.plot(x,y_max,marker=‘o’,label=‘最高气温’)
plt.plot(x,y_min,marker=‘o’,label=‘最低气温’)
x_temp=4
for y_h,y_1 in zip(y_max,y_min):
plt.text(x_temp-0.3,y_h+0.7,y_h,family=‘SimHei’,
fontsize=8,fontstyle=‘normal’)
plt.text(x_temp-0.3,y_1+0.7,y_1,family=‘SimHei’,
fontsize=8,fontstyle=‘normal’)
x_temp+=1
plt.xlabel(‘日期’)
plt.ylabel(‘温度( ∘ ^\circ c)’)
plt.ylim(0,40)
plt.legend()
plt.title(‘2020080603051’)
plt.show()
在这里插入图片描述
4.6、切换主题
matplotlib.style模块中内置了一些图表的主题风格,通过切换不同的主题风格以满足用户的不同需求。所有的主题风格都存储与matplotlib配置文件夹中的style目录中,可以通过访问available变量查看所有可用的主题风格。
import matplotlib.style as ms
print(ms.available)
#主题风格如下:
[‘Solarize_Light2’, ‘_classic_test_patch’, ‘bmh’, ‘classic’, ‘dark_background’, ‘fast’, ‘fivethirtyeight’, ‘ggplot’, ‘grayscale’, ‘seaborn’, ‘seaborn-bright’, ‘seaborn-colorblind’, ‘seaborn-dark’, ‘seaborn-dark-palette’, ‘seaborn-darkgrid’, ‘seaborn-deep’, ‘seaborn-muted’, ‘seaborn-notebook’, ‘seaborn-paper’, ‘seaborn-pastel’, ‘seaborn-poster’, ‘seaborn-talk’, ‘seaborn-ticks’, ‘seaborn-white’, ‘seaborn-whitegrid’, ‘tableau-colorblind10’]
代码如下:
plt.plot([1,2,3],[3,4,5],marker=’
’,markersize=20,markerfacecolor=‘skyblue’)
ms.use(’_classic_test_patch’)#控制主题风格
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述
4.7、填充区域
4.7.1、填充多边形或曲线之间的区域
matplotlib中提供了多个函数用于填充多边形或区域,分别为fill()、fill_between()和fill_betweenx()。其中fill()是填充多边形;fill_between()和fill_betweenx()函数分别用于填充两条水平曲线和垂直曲线之间的区域。
1、使用fill()函数填充多边形
2、使用fill_between()函数填充两条水平曲线之间的区域
3、使用fill_betweenx()函数填充两条垂直曲线之间的区域
示例代码如下:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,8np.pi,1000)
sin_y=np.sin(x)
cos_y=np.cos(1.5
x/np.pi)/2
plt.plot(x,sin_y)
plt.plot(x,cos_y)
plt.fill_between(x,cos_y,sin_y,cos_y<sin_y,color=‘pink’,alpha=0.5)
plt.fill_between(x,cos_y,sin_y,cos_y>sin_y,color=‘skyblue’,alpha=0.5)
plt.title(“2020080603051”)
在这里插入图片描述
4.7.2、案例5:雪花
代码如下:
def koch_snowflake(order,scale=10):
def _koch_snowflake_complex(order):
if order==0:
angles=np.array([0,120,240])+90
return scale / np.sqrt(3)np.exp(np.deg2rad(angles)1j)
else:
ZR=0.5-0.5j
np.sqrt(3)/3
p1=_koch_snowflake_complex(order-1)
p2=np.roll(p1,shift=-1)
dp=p2-p1
new_points=np.empty(len(p1)4,dtype=np.complex128)
new_points[::4]=p1
new_points[1::4]=p1+dp/3
new_points[2::4]=p1+dp
ZR
new_points[3::4]=p1+dp/3
2
return new_points
points=_koch_snowflake_complex(order)
x,y=points.real,points.imag
return x,y
x,y=koch_snowflake(order=2)
fig=plt.figure()
ax=fig.add_subplot(111)
ax.fill(x,y,facecolor=‘skyblue’,edgecolor=‘snow’,linewidth=3)
plt.title(“2020080603051”)
plt.show()
在这里插入图片描述

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值