【python 数据挖掘】基于matplotlib的绘图一:四种基本图形及其参数


图形化最大的优点就是直观,图像比表格能够传递更多信息,但是一张优秀的统计图,首先要保证正确性,这里的正确是指用合理的统计图来表达原始数据的特征或者联系。比如:展示不同城市的手机的销售量,就不适合用折线图,因为销售量和城市之间不能体现趋势,用条形图就更合适。所以 用对是前提

1、折线图
  • 把图画出来:
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,3*np.pi,0.1)
y = np.sin(x) 

plt.plot(x,y) # 用列表也行,但是用列表想计算正弦就很难了

plt.show() # 在spyder等图形界面的环境下不加plt.show()也能出图,但在命令行环境下就必须加这句话才会弹出图窗

image-20220111221448653

掌握了以上用法,就会最基本的画图了,但就跟会print('hello, world!')一样。(/捂脸笑)

  • 常用参数:改一改,看一看以下一些参数就基本够用了
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,3*np.pi,0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# 打开一个10*6英寸,编号'89757'的图窗
plt.figure(num='89757',figsize=(10,6))

# 设置线条形状和标记的形状、线宽和标记的大小、颜色
plt.plot(x,y1,linestyle='-.',marker='o',linewidth=0.5,markersize=3,color='r')
plt.plot(x,y2,linestyle='--',marker='^',linewidth=0.5,markersize=3,color='g')

# 设置标题和横纵坐标的范围,lim是limit的缩写
plt.title('plot')
plt.xlim((0,3*np.pi))
plt.ylim((-1,1))

# 设置横纵标签文本以及距离坐标轴的距离,以及旋转角度,y轴默认90°
plt.xlabel('x', labelpad=5)
plt.ylabel('y', labelpad=5, rotation=0)

# 设置网格和图例
plt.grid(b=True,which='major',axis='y',linestyle=':',color='y')
plt.legend(('y=sin(x)','y=cos(x)'))

# 绘图
plt.show() # 在spyder等图形界面的环境下不加plt.show()也能出图,但在命令行环境下就必须加这句话才会弹出图窗

image-20220111221628218

2、散点图
  • 常用参数:(艺术大师-shug)
import matplotlib.pyplot as plt
import numpy as np

# 支持中文
plt.rcParams['font.sans-serif']=['SimHei'] 

# 开图窗
fig = plt.figure(num=1,figsize=(8,6),facecolor='w',frameon=True)
ax = fig.add_subplot(111)

# 夜空
ax.patch.set_color('darkblue')

# 星星
N=20 
plt.scatter(np.random.rand(N), np.random.rand(N),c='k',s=50,marker='*')
plt.scatter(np.random.rand(N), np.random.rand(N),c='r',s=10,marker='*')
plt.scatter(np.random.rand(N), np.random.rand(N),c='g',s=100,marker='*')
plt.scatter(np.random.rand(N), np.random.rand(N),c='pink',s=70,marker='*')
plt.scatter(np.random.rand(N), np.random.rand(N),c='y',s=120,marker='*')

'''
marker=['.',',','o','v','^','<','>','1','2','3','4','s','p','*','h','H','+',
        'x','D','d','|','_','.',','] # marker标记的样式库,具体长啥样自己试一下就知道了
'''

# 设置标题和横纵坐标的范围
plt.title('繁星')
plt.xlim((0,1))
plt.ylim((-1,1))

# 关掉坐标标签和坐标刻度线
plt.xlabel('')
plt.ylabel('')
plt.xticks(())
plt.yticks(())

# 绘图
plt.show() # 在spyder等图形界面的环境下不加plt.show()也能出图,但在命令行环境下就必须加这句话才会弹出图窗

image-20220111231109520

3、条形图
# 导入绘图模块
import matplotlib.pyplot as plt
import numpy as np
# 构建数据
Y2016=[15600,12700,11300,4270,3620]
Y2017=[17400,14800,12000,5200,4020]
labels=['Beijing', 'Shanghai','HongKong','Shenzhen', 'Guangzhou']
bar_width=0.5
plt.figure(figsize=(10,6))
#设置条形颜色、透明度、宽度
plt.bar(np.arange(5),Y2016,label='2016',color='yellow',alpha=0.8,width=bar_width)
plt.bar(np.arange(5)+bar_width,Y2017,label='2017',color='black',alpha=0.8,width=bar_width)
#添加轴标签
plt.xlabel('Top5City',fontproperties='Times New Roman',fontsize=16)
plt.ylabel('Family Amount',fontproperties='Times New Roman',fontsize=16)
plt.xticks(np.arange(5)+bar_width,labels)
plt.ylim([2500,20000])
plt.yticks(fontproperties='Times New Roman', size=14)
plt.xticks(fontproperties='Times New Roman',size=14)
#添加标题
plt.title('Millions Family  AmountTop5City   Distribution ',fontproperties='Times New Roman', fontsize=16)
#为每个条形图添加数值标签
for x2016,y2016 in enumerate(Y2016):
    plt.text(x2016-0.25,y2016+100,'%s'%y2016)
for x2017,y2017 in enumerate(Y2017):
    plt.text(x2017+0.2,y2017+100,'%s'%y2017)
#显示图例
plt. legend()

plt. show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVXOjCWK-1641914072692)(%29#pic_center)]

4、饼状图
# 导入绘图模块
import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(10,6))
# 构造数据,调整数据顺序,以免低占比的饼块相邻,无法分辨
edu=[0.2515,0.0057,0.3724,0.3336,0.0368]
labels=['HighSchool','Others','Junior College','Eachelor','Master']
explode=[0,0,0.1,0,0]#用于分离突出显示大专学历人群
colors=['#61666f','#000000','#6f6f6f','#9f9f9f','#cfcfef']
# 黑白灰度显示颜色
# 将横、纵坐标轴标准化处理,保证饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')
# 控制x轴和y轴的范围
plt.xlim(0,4)
plt.ylim(0,4)
# 绘制饼图
plt.pie(x=edu,#绘图数据
    explode=explode,#突出显示大专人群
    labels=labels,#添加教育水平标签
    colors=colors,#设置饼图的自定义填充色
    autopct='%.1f%%',#设置百分比的格式,这里保留一位小数
    pctdistance=0.5,#设置百分比标签与圆心的距离
    labeldistance=1.0,#设置教育水平标签与圆心的距离
    startangle=180,#设置饼图的初始角度
    radius=1.5,#设置饼图的半径
    counterclock=False,#是否逆时针,这里设置为顺时针方向
    wedgeprops={'linewidth':1.5,'edgecolor':'green'},#设置饼图边界的属性值
    textprops={'fontsize':20,'color':'k'},#设置文本标签的属性值
    center=(1.8,1.8),#设置饼图的原点
    frame=True) #是否显示饼图的图框,这里设置显示
#删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())


plt.show()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值