您的位置:首页 > 编程语言 > PHP开发

Matplotlib数据可视化——综合练习一(基础图表、饼图、直方图、柱状图、极坐标图、散点图的绘制)

2020-06-03 05:47 1061 查看

基础图表、饼图、直方图、柱状图、极坐标图、散点图的绘制

前言

在练习之前,需要掌握的知识:

numpy
Matplotlib
pandas(不要求)

如果不熟悉可以查看我关于这方面的博客~~~~😎

题一:利用matplotlib库文件,画图函数y=x^2的图形。结合图中的颜色标出横纵坐标。

import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl

#解决中文显示问题 手动设置
mpl.rcParams['font.sans-serif']=['FangSong']

#设置x,y轴的数值
x = np.linspace(0,10,6)
y = x**2

plt.xlabel("横轴:x").set_color('g')
plt.ylabel("纵轴:y=x^2").set_color('r')

plt.plot(x,y,'r--',linewidth=2)

#显示图示
plt.legend()

#显示图
plt.show()

题二: 利用matplotlib库文件,画图函数y=x^2的图形。结合图中的颜色标出横纵坐标。

import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl

#解决中文显示问题 手动设置 仿宋体
mpl.rcParams['font.sans-serif'] = ['FangSong']

#设置x,y的值
x = np.arange(0,10,0.3)
y = x**2

plt.xlabel("横轴:x").set_color('g')

plt.ylabel("纵轴:y=x^2").set_color('r')
plt.xlim(0,10)                                                              #设置x轴的区间
plt.ylim(0,100)                                                             #设置y轴的区间
plt.xticks([0,2,4,6,8,10])
plt.yticks([0,20,40,60,80,100]

plt.plot(x,y,"b>-",linewidth=2)

#显示图示
plt.legend()

#显示图
plt.show()

题三: 利用matplotlib库文件,画图函数y=cos⁡(2πx)的图形。结合图中的颜色标出横纵坐标。

import matplotlib.pyplot as plt
import numpy as np

#定义函数实现y = f(x) =cos(2πx)
def f(x):
return np.cos(2*np.pi*x)

a = np.arange(0.0,5.0,0.02)

plt.plot(a,f(a),'b--')
plt.xlabel("横轴:时间",fontproperties='Kaiti',fontsize=14,color='g')
plt.ylabel("纵轴:振幅",fontproperties='SimHei',fontsize=14,color='k')
plt.title("正玄波实例 y = cos(2πx)",fontproperties='SimHei',fontsize=18,color='k')

plt.annotate(r'$\mu=100$',xy=(2,1),fontproperties='SimHei',fontsize=12,color='red')

plt.grid(True)
plt.axis([-1,6,-2,2])

pkt.show()

题四:利用matplotlib库文件,画出如下子图的图形。

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:,-1])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])

plt.show()

题五:利用matplotlib库文件,结合子图的画法,把下面三个函数画在同一个图中。并标出横纵坐标及对应的颜色。

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus'] = False

gs = gridspec.GridSpec(2,2)
#防止画图时重叠
plt.subplots_adjust(hspace=1)
#绘图一
ax1 = plt.subplot(gs[0,0])
x = np.arange(0,10,0.3)
y = x*x

plt.xlabel("横轴:x").set_color('g')
plt.ylabel("纵轴:y=x^2").set_color('r')
plt.plot(x,y,"b>-",linewidth=2)

#绘图二
ax2 = plt.subplot(gs[0,1])
def g(x):
return np.cos(2*np.pi*x)

a = np.arange(0,4,0.02)
plt.plot(a,g(a),'r--')
x = [0,2,4]
y = np.linspace(-1,1,3)
plt.xticks(x)
plt.yticks(y)

#绘图三
ax3 = plt.subplot(gs[1,:])
def f(x):
return np.cos(2*np.pi*x)

a = np.arange(0.0,5.0,0.02)
plt.plot(a,f(a),"b--")
plt.xlabel('横轴:时间',fontproperties='Kaiti',fontsize=14,color='g')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=14,color='k')
plt.title('正玄波实例 y=cos(2πx)',fontproperties='SimHei',fontsize=18,color='k')

plt.grid(True)
plt.axis([-1,6,-2,2])
plt.annotate(r'$\mu=100$',xy=(2,1),fontproperties='SimHei',fontsize=12,color='red')

plt.legend()
plt.show()

题六:利用matplotlib库文件,结合阶梯图函数plt.step()。画出函数y=sin⁡(x)的图形。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus'] = False

x = np.arange(1,11)
y = np.sin(x)

plt.step(x,y,'r')
plt.show()

题七:1. 利用matplotlib库文件,画出如下的饼图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus'] = False

labels = ["A班","B班","C班","D班"]
sizes = [10,30,45,15]

#如果是要没有阴影部分就将 shadow = False
patch,text1,text2 = plt.pie(sizes,labels = labels,autopct='%1.1f%%',shadow=True,startangle=90)

plt.title("班级名称")
plt.axis('equal')
plt.legend()

plt.show()

题八:利用matplotlib库文件,画出如下的饼图(explod=0.5)

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus'] = False

labels = ["A班","B班","C班","D班"]
sizes = [10,30,45,15]
explode = (0,0,0.5,0)

#如果是要没有阴影部分就将 shadow = False
patch,text1,text2 = plt.pie(sizes,labels = labels,explode=explode,autopct='%1.1f%%',shadow=True,startangle=90)

plt.title("班级名称")
plt.axis('equal')
plt.legend()

plt.show()

题九:利用matplotlib库文件,画出如下的直方图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong']
mpl.rcParams['axes.unicode_minus'] = False

xlab = ["A班","B班","C班","D班"]
list = [5,7,4,3]

x = range(len(list))

bar = plt.bar(left=x,height=list,width=0.8,color=['r','k','g','b'],alpha=0.8)
plt.ylim(0,7.5)
plt.xticks(x,xlab)

#因为网格线一直没有被覆盖 所以加了这一条语句
plt.style.use('ggplot')
plt.rc('axes',axisbelow=True)
plt.grid(ls='--')

plt.legend()
plt.show()

题十:利用matplotlib库文件,画出如下的直方图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

sizes = [38,40,45.4,38.9,33.34]

plt.barh(range(5),sizes,height=0.7,color='steelblue',alpha=0.8)
plt.yticks(range(5),['亚马逊','当当网','中国图书网','京东','天猫'])

plt.xlim(30,47)
plt.xlabel("价格")
plt.title("不同平台图书价格")

for x,y in enumerate(sizes):
plt.text(y+0.2,x-0.1,'%s' % y)

plt.show()

题十一:利用matplotlib库文件,画出如下的直方图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

xlab = ['2014','2015','2016','2017']
list1 = [20,30,15,35]
list2 = [15,30,40,20]

x = range(len(list1))

bar1 = plt.bar(left=x, height=list1, width=0.45, alpha=0.8, color='red', label="一部门")
bar2 = plt.bar(left=x, height=list2, width=0.45, color='green', label="二部门", bottom=list1)
plt.ylim(0, 80)
plt.ylabel("数量")
plt.xticks(x, xlab)
plt.xlabel("年份")
plt.title("某某公司")
plt.legend()

plt.show()

题十二:利用matplotlib库文件,画出如下的散点图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

plt.scatter(np.random.randn(1000), np.random.randn(1000), marker = '*')

plt.show()

题十三:利用matplotlib库文件,画出如下的散点图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

plt.xlabel("横轴:X",color = "g")
plt.ylabel("纵轴:Y",color = "r")
plt.scatter(np.random.randn(1000), np.random.randn(1000), marker = 'o')

plt.title("散点图",color = "b")
plt.show()

题十四:利用matplotlib库文件,画出如下的极坐标图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

ax = plt.subplot(111, projection='polar')

plt.show()

题十五:利用matplotlib库文件,画出如下的极坐标图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

N = 20
thera = np.linspace(0.0, 2 * np.pi, N, endpoint = False)
radis = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)

ax = plt.subplot(111, projection = 'polar')
bars = ax.bar(thera, radis, width = width, bottom = 0.0)

for r, bar in zip(radis, bars):
bar.set_facecolor(plt.cm.viridis(r / 10.))
bar.set_alpha(0.5)

plt.show()

题十六:利用matplotlib库文件,画出如下的极坐标图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

n = 100
radis = 2 * np.random.rand(n)
theta = 2 * np.pi * np.random.rand(n)
area = 200 * radis**2
colors = theta

ax = plt.subplot(111, projection='polar')
axs = ax.scatter(theta, radis, c=colors, s=area, cmap='hsv', alpha=0.75)

plt.show()

题十七:利用matplotlib库文件,画出如下的点线图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

x = np.arange(10)
y = 2*x+5

plt.plot(x,y,"o")
plt.xlim(1,10)
plt.ylim(5,25)
plt.yticks([5,10,15,20,25])

plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.title("Matplotlib demo")

plt.show()

题十八:利用matplotlib库文件,画出如下的曲线图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
x = np.arange(0,10,0.1)
ysin = np.sin(x)
ycos = np.cos(x)

plt.subplot(2,1,1)
#画图时增加子图间距 防止重叠
plt.subplots_adjust(hspace=0.5)
plt.xlim(0,10)
plt.ylim(-1.0,1.0)

plt.plot(x,ysin,"-")
plt.title("Sine")

plt.subplot(2,1,2)
plt.xlim(0,10)
plt.ylim(-1.0,1.0)

plt.plot(x,ycos,"-")
plt.title("Cosine")

plt.show()

题十九:利用matplotlib库文件,画出如下的条形图。

import matplotlib.pyplot as plt
import numpy as np
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

x1 = [5,7,8,10]
x2 = [6,9,11]
y = np.arange(16)
height1 = [12,0,16,6]
height2 = [6,14,7]

plt.bar(x1,height1)
plt.bar(x2,height2,color="g")

plt.xlabel("X axis")
plt.ylabel("Y axis")
plt.title("Bar graph")
plt.show()

题二十:利用matplotlib库文件,画出如下的直方图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

plt.xlim(0,100)
plt.ylim(0,5)

data = [0,10,15,20,25,30,35,40,44,48,52,56,60,70,100]
plt.hist(data,bins=5,histtype='stepfilled',facecolor="b",alpha=0.75)

plt.title("histogram")
plt.show()

题二十一:利用matplotlib库文件,画出如下的饼图。

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

labels = [u'娱乐',u'汽车',u'房屋',u'食物']
colors = ['silver','orange','dimgrey','tan']
sizes = [5,20,41,34]
explode = [0.1,0.1,0.1,0.1]

d,ax = plt.subplots()
ax.pie(sizes,labels=labels,explode=explode,colors=colors,autopct='%1.0f%%',shadow=False,pctdistance=0.5,startangle=0,textprops={'fontsize':12,'color':'w'})
ax.axis('equal')
plt.title("实际支出摘要",color='dimgrey')

ax.legend(bbox_to_anchor=(0.1,-0.1),loc='lower left',frameon=False,ncol=4)
plt.show()

题二十二:利用matplotlib库文件,画出如下的子图

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['font.size'] = 11

#图一
plt.subplot(211)
#画图时增加子图间距 防止重叠
plt.subplots_adjust(hspace=1)
x = np.arange(0, 5,0.02)
y = np.cos(2*np.pi*x) * np.exp(-x)
plt.plot(x,y,"b-")
plt.xlim(-0.5,5)                                                              #设置x轴的区间
plt.ylim(-0.6,1.2)                                                             #设置y轴的区间
plt.xticks([0,1,2,3,4,5])
plt.yticks([-0.5,0.0,0.5,1.0])
plt.title("阻尼振动 vs 无阻尼振动")    #设置x轴标签
plt.ylabel(r'$y=2\pi x/e^x$',fontproperties="SimHei",fontsize=10)  #设置y轴标签

plt.title("阻尼振动 VS 无阻尼振动")

#图二:
plt.subplot(2,1,2)
a = np.arange(0.0,2.0,0.04)
plt.plot(a,np.cos(2*np.pi*a),'r.-')
plt.xlabel("时间(s)",fontproperties='SimHei',fontsize=10)
plt.ylabel(r'$y=2\pi x$',fontproperties='SimHei',fontsize=10)
plt.axis([0.00,2.00,-1.0,1.0])

plt.show()

题二十三:利用matplotlib库文件,画出如下的直方图

import matplotlib.pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

xlab = ['北京市', '上海市', '天津', '重庆市']
list = [12406, 13908, 8386, 9143]

x = range(len(list))

bar = plt.bar(left=x, height=list, width=0.8, color = 'g', alpha=0.8)
plt.ylim(0, 14500)
plt.xticks(x, xlab)

for x,y in enumerate(list):
plt.text(x , y,'%s' % y, ha='center', va= 'bottom',fontsize=11)

plt.title("GDP大比拼")
plt.legend()
plt.show()

题二十四:利用matplotlib库文件,画出如下的直方图(bin=30)

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.family']='SimHei'
plt.rcParams['font.size']=14

# 直方图
mu = 100
sigma = 20
x = np.random.normal(mu,sigma,size=100) # 均值和标准差

plt.hist(x,bins=30,normed=1,color='g',histtype='stepfilled',alpha=0.75)
plt.ylim(0.000,0.035)
plt.title('直方图')
plt.show()

最后一题:完成词云图绘制

  • 安装jieba中文库
  • 安装wordcloud模块
pip install jieba
pip insall wordcloud

准备数据

爬取某学校网站近两年的新闻标题

python代码

import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud

# 打开文本
text = open('2019-2020新闻标题.txt').read()

# 中文分词
text = ' '.join(jieba.cut(text))
wc = WordCloud(font_path='C:/Windows/Fontsfangzhengsongke.ttf', width=1000, height=800, mode='RGBA',background_color=None).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

# 保存到文件
wc.to_file('wordcloud.png')

打印结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: