实验四 matplotlib的基本使用
1.实验内容
(1)matplotlib的导入。
(2)matplotlib图形基本设置。
(3)matplotlib折线图的绘制。
(4)matplotlib饼图的绘制。
(5)matplotlib散点图的绘制。
(6)matplotlib条形图的绘制。
(7)matplotlib盒形图的绘制。
(8)词云图的绘制。
2.目的要求
(1)学会matplotlib的导入。
(2)掌握matplotlib图形的基本设置。
(3)掌握matplotlib折线图的绘制。
(4)掌握matplotlib饼图的绘制。
(5)掌握matplotlib散点图的绘制。
(6)掌握matplotlib条形图的绘制。
(7)掌握matplotlib盒形图的绘制。
(8)掌握词云图的绘制。
- xlim():设置x坐标轴范围
- ylim():设置y坐标轴范围
- xlabel():设置x坐标轴名称
- ylabel():设置y坐标轴名称
- xticks():设置x轴刻度
- yticks():设置y轴刻度
3.实验方法手段及其条件
(1)导入matplotlib、numpy和pandas并解决中文乱码问题。
%matplotlib inline
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#设置rc参数显示中文标题,设置字体为SimHei国标黑体显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False #设置正常显示字符
#解决中文乱码问题
import importlib,sys
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname='./msyh/msyh.ttc')#mysh微软雅黑
plt.rcParams['axes.unicode_minus']=False #解决负号'_'显示为方块的问题
#设置rc参数显示中文标题
#设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'#国标黑体
#设置正常显示字符
plt.rcParams['axes.unicode_minus'] = False
(2)在同一坐标系中绘制多种曲线,通过样式、宽度、颜色加以区分并设置标题、坐标轴名称。
x = np.linspace(0, 3, 200) #产生从0到3均匀分布的200个浮点ndarray
三条线段颜色取值为蓝、绿、青,编写程序输出如下图形:
plt.figure(figsize=(5,4)) #设置画布大小
x = np.linspace(0, 3, 200)
y1=x**1 # 青色实线
y2=x**2 # 蓝色短线段
y3=x**3 # 绿色点线
#标题,x轴说明,y轴说明
plt.title("My First Plot")
plt.xlabel("x 轴")
plt.ylabel("y 轴")
#轴的刻度
xpoints = np.array([0, 3])
ypoints = np.array([0, 25])
#画线 plt.plot(x,y1,'c-',label='y = x$^{1}$')
# plt.polt(x,函数,线型,图例)
plt.plot(x,y1,'c-',label='y = x$^{1}$')
plt.plot(x,y2,'b--',label='y = x$^{2}$')
plt.plot(x,y3,'g:',label='y = x$^{3}$')
plt.legend(loc='upper left',frameon=False)
#图像注解
plt.annotate(s='Here I am',xy=(1,1),xytext=(3.5,-0.5),\
weight='bold',color='black',\
arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'),\
bbox=dict(boxstyle='round,pad=0.5', fc='yellow', ec='black',lw=1 ,alpha=0.4))
plt.show()
(3)将多幅子图绘制在同一画板
要求:编写程序将4幅子图绘制在同一画板,所有图形使用默认颜色,输出结果如下图所示:
#读入当前文件夹下的学生成绩文件“scoresheet.xlsx”
stuscore=pd.read_excel('data/scoresheet.xlsx',header=None,
names=['id','name','gender','english','math',
'ethnic theory','physics'] )
#stuscore #显示文件内容
plt.figure(figsize=(11,7)) #设置画布大小
#用hsapce和wspace调整图与图之间的行列间隙
plt.subplots_adjust(hspace=0.6,wspace=0.2)
mpl.rcParams['font.size'] = 8; mpl.rcParams['figure.figsize'] = (12,9)
plt.rcParams['font.sans-serif'] = ['SimHei']; plt.rcParams['axes.unicode_minus'] = False
#创建一个2行2列的拼图
plt.subplot(221)
#设置 x,y轴的刻度值
plt.xticks(np.arange(0,15,2));plt.yticks(np.arange(50,100,10))
#绘制 各科成绩的折线图
plt.plot(stuscore.english,label='english score');plt.plot(stuscore.math,label='math score')
plt.plot(stuscore['ethnic theory'],label='ethnic theory score');plt.plot(stuscore.physics,label='physics score')
#图例
plt.legend(loc=8,frameon=False,bbox_to_anchor=(0.5, -0.4))
#设置标题
plt.title("学生期末各科成绩折线图")
plt.subplot(222);plt.bar(stuscore['name'],stuscore['physics'],width = 0.8)
# x坐标轴标注的倾斜 rotation参数是度数
plt.xticks(rotation=50);plt.title("学生期末物理成绩条形图")
plt.subplot(223);plt.xticks(np.arange(64,80,2));plt.ylim(70,91);plt.scatter(stuscore['ethnic theory'],stuscore['physics'],25)
plt.title("学生民族理论和物理成绩散点图")
plt.subplot(224);plt.pie(stuscore['gender'].value_counts(),labels=['男','女'],autopct="%1.1f%%");plt.title("学生性别饼图")
plt.show()
(4)读入当前文件夹下的“sanguo.csv”,完成对《三国演义》小说的文档读取以及词云图片输出。输出结果如下图所示。
import jieba
from wordcloud import WordCloud #词云包
s=pd.read_csv('data\sanguo.csv',encoding='utf-8')
s.head()#首行是列标签,每段成一行
mylist=s['三国演义']#指定用于制图的文本,也可以使用列表或元组等序列。
word_list=[" ".join(jieba.cut(sentence)) for sentence in mylist]
new_text=' '.join(word_list) #将所有文本字符链接起来
wordcloud=WordCloud(font_path='./msyh/msyh.ttc',
background_color="white",
width=2000,height=1000,
max_words=200).generate(new_text)
#wordcloud对象用于设置词云图的字体、背景颜色、最大词频数等。
plt.imshow(wordcloud)
plt.axis("off") #关闭显示坐标轴
plt.show()