爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: 15195775117

[参考资料] [已收纳]python可视化库matplotlib与IDL对比

[复制链接]
 楼主| 发表于 2020-6-18 14:22:22 | 显示全部楼层

箱型图

360截图20200618141917982.jpg

#箱型图可分析离群值
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'
x=np.random.randn(1000)
plt.boxplot(x)
plt.xticks([1],['鸡'])#含义不明,不知如何绘制多个箱型图!
plt.show()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-18 14:30:26 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-23 10:19 编辑

误差棒
360截图20200618142908963.jpg
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'

x=np.arange(0,np.pi,0.1)
y=np.sin(x)
plt.errorbar(x,y,yerr=y/2,xerr=y/4,fmt='bo:')
plt.show()
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-18 21:57:59 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-23 10:20 编辑

堆积图
1.jpg

import matplotlib.pyplot as plt
import numpy as np
#字体设置:
plt.rcParams['font.family'] = 'simhei'#黑体


x=np.arange(1,9,1)
y=np.arange(1,9,1)
plt.bar(x,y,
        align='center',
        color='c',#填色
        hatch='/',#填充斜杠
        tick_label=['鼠','牛','虎','兔','龙','蛇','马','羊'])


y1=9-np.arange(1,9,1)
plt.bar(x,y1,
        bottom=y,
        align='center',
        color='r',#填色
        hatch='/',#填充斜杠
        tick_label=['鼠','牛','虎','兔','龙','蛇','马','羊'])


y2=np.zeros(8)+1
plt.bar(x,y2,
        bottom=y1+y,#在之前的基础上继续抬高
        align='center',
        color='g',#填色
        hatch='/',#填充斜杠
        tick_label=['鼠','牛','虎','兔','龙','蛇','马','羊'])


plt.xlabel('生肖')
plt.show()

横向堆积图

只要将以上代码中,bar以barh替换,bottom以left替换即可

2.jpg



密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-18 22:38:49 | 显示全部楼层
并列柱状图
360截图20200618222610097.jpg

import matplotlib.pyplot as plt
import numpy as np
#字体设置:
plt.rcParams['font.family'] = 'simhei'


x=np.arange(5)
y=[6,10,4,5,1]
y1=[2,6,3,8,5]
y2=[1,2,3,4,5]
bar_width=0.2


plt.bar(x,y,bar_width,color='c',align='center',label='班级A',alpha=1)
plt.bar(x+bar_width,y1,bar_width,color='b',align='center',label='班级B',alpha=1)
plt.bar(x+bar_width*2,y1,bar_width,color='r',align='center',label='班级B',alpha=1)


tick_label=['A','B','C','D','E']
plt.xticks(x+bar_width/3,tick_label)#设置横轴刻度名的位置


plt.xlabel('横轴名')
plt.ylabel('纵轴名')
plt.show()


横向并列柱状图

只需将以上代码的bar改为barh,xticks改为yticks即可

360截图20200618223717823.jpg

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-18 23:02:48 | 显示全部楼层
堆积折线图
360截图20200618225944128.jpg

import matplotlib.pyplot as plt
import numpy as np
#字体设置:
plt.rcParams['font.family'] = 'Simhei'


x=np.arange(0,np.pi*2,0.01)
y=abs(np.sin(x))
y1=y
y2=y
labels=['福','禄','寿']
colors=['b','r','g']
plt.stackplot(x,y,y1,y2,labels=labels,colors=colors)
plt.legend()
plt.show()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 15:10:09 | 显示全部楼层
本帖最后由 15195775117 于 2020-6-19 15:12 编辑

间断条形图
360截图20200619150609482.jpg

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'


#(3,2)表示以3位起点向右跨2个单位,即占[3,5]区间
plt.broken_barh([(1,1),(3,2),(6,3)],(2,1),facecolors=('r','g','b'))
plt.broken_barh([(3,2),(6,2),(9,1)],(4,2),facecolors=('r','g','b'))
plt.ylim(1,7)
plt.xticks(np.arange(0,12,1))#刻度设置,类似于IDL的tickvalues
plt.yticks([2.5,6.5],['2.5','6.5'])#刻度与文本设置
plt.show()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 15:38:53 | 显示全部楼层
阶梯图
360截图20200619153539442.jpg

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'

x=np.arange(0,10,1)
y=(x-3)**2
plt.plot(x,y,color='b')
#pre模式,曲线下降,阶梯处于下方,曲线上升,阶梯处于上方,可想象为"阻碍"
plt.step(x,y,where='pre',color='r')
#post模式,曲线下降,阶梯处于上方,曲线上升,阶梯处于下方,可想象为"促进"
plt.step(x,y,where='post',color='g')
plt.show()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 10:29:12 | 显示全部楼层
环饼图


360截图20200620101200148.jpg

python提供的语法,支持画一个环饼图,其实就是饼图中设置了环的厚度,
饼图中环厚度=1,最大,
一个环分内外2个弧,外弧位置1.2,厚度0.4,则内弧位置0.8,占比文字放在1.0处最合适。


import matplotlib.pyplot as plt
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'


elements=['鸡','鸭','鱼','肉','蛋']
ringthick=0.25#环的厚度
#radius:扇形环外弧的位置
#不同环的半径间隔是环厚度,不然就会空开或重叠,当然,这完全是DIY的:
for radius in [1.2,0.95,0.7]:
    wedges,texts,autotexts=plt.pie(
        [40,15,20,10,15],
        autopct='%3.1f%%',
        radius=radius,
        #占比文本相对于中心的位置,取内外弧位置的平均
        #此处pctdistance是以radius为单位1计算的比例:
        pctdistance=(radius*2-ringthick)/2/radius,#固定下来不需改
        colors=['r','g','b','c','m'],#配色
        textprops=dict(color='w'),#占比字体颜色
        wedgeprops=dict(width=ringthick,#环的厚度
                        edgecolor='w'))#扇形边框颜色
    plt.legend(wedges,elements,fontsize=12,#图例是通过wedges和elements建立的
                title='图例',loc='center left',
                bbox_to_anchor=(1,0,0.3,1))#图例位置
    plt.setp(autotexts,size=10,weight='bold')#设置占比字体,也可以不设置,默认的也可用
    plt.setp(texts,size=10)#?未研究用途
plt.title('食物表')
plt.show()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2020-6-20 13:15:16 | 显示全部楼层
一步一步地学习python,谢谢大佬
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-20 14:18:43 | 显示全部楼层
图例与标题设置
360截图20200620141312866.jpg

import matplotlib.pyplot as plt
import numpy as np
#制图用微软雅黑支持汉字,该代码可作为常备设置:
plt.rcParams['font.family'] = 'Microsoft YaHei'

a=np.arange(0,np.pi*2,0.1)
plt.plot(np.sin(a),label='正弦曲线')
plt.legend(loc='upper center')

plt.title('标题在左',loc='left',size=20,color='r',
          family='FangSong')#仿宋
plt.title('标题在右',loc='right',size=20,color='g',
          family='KaiTi')#楷体
plt.title('标题在中',loc='center',size=20,color='b',
          family='Microsoft Yahei')#微软雅黑
plt.show()

#legend位置含义如下:
legned位置.jpg

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表