python绘图练习

1.绘制重庆24小时的气温图像的折线图,有标题x轴y轴并将最低气温最高气温单独标出

# @Time:2021/12/1014:18
# @Author:中意灬
# @File:天气.py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np
from scipy import interpolate

y=[9,10,12,13,14,13,13,14,15,16,14,15,15,15,15,14,14,13,13,13,12,12,12,11]
x=np.arange(1,25)#生成1道25的一维数列
xnew=np.arange(1,24,0.001)
fig=plt.figure()#生成一个画布
plt.rcParams['font.sans-serif']=['SimHei']#使其能显示中文
plt.title('重庆24时气温温度')#题目
plt.xlabel('时间')#设置x轴的标签
plt.ylabel('温度')#设置y轴标签
dftime=['%s时' % i  for i in x]#生成一个1时到24时的一位列表
plt.xticks(x,dftime,rotation=300)#显示x轴对应的标签,旋转300°
dfwendu=['%s°C'%i for i in y]
plt.yticks(y,dfwendu,rotation=300)#显示y轴对应的标签,旋转300°
func = interpolate.interp1d(x, y, kind='cubic')
# 利用xnew和func函数生成ynew,xnew的数量等于ynew数量
ynew = func(xnew)
plt.plot(xnew,ynew,'-')#绘制出x,y,marker设置标记形状
for a,b in zip(x,y):#遍历缝合
    plt.text(a,b,str(b)+'°C',ha='center',va='bottom',fontsize=10)#给图中的点加标签,ha表示水平对齐方式,va表示垂直对其方式,fontsize表示字体大小
for i in range(len(y)):
    if y[i]==max(y):
        plt.plot(i+1,max(y), marker='o', color='r')#将最高温度的点标出
for i in range(len(y)):
    if y[i]==min(y):
        plt.plot(i+1,min(y), marker='o', color='r')#将最低温度的点标出
plt.scatter(x,y)#绘制出散点图
plt.tight_layout
plt.show()#将图片显示出来

运行结果:
在这里插入图片描述

2.绘制xe^-x+xsinx图像x范围在[-1,1]之间

# @Time:2021/12/1014:53
# @Author:中意灬
# @File:2.py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np

x=np.linspace(-1,1,1000)#生成-1到1的等距的1000个点
y=x*np.exp(-x)+x*np.sin(x)
fig=plt.figure()
plt.xlabel('X')#设置x轴的标签
plt.ylabel('Y')#设置y轴的标签
plt.plot(x,y)
plt.legend(labels=['$xe^{-x}+xsinx$'])#设置图例
plt.show()

运行结果:
在这里插入图片描述

3.找到中国电影前十排行榜,自选图像惠子,要求生动形象。

# @Time:2021/12/1015:00
# @Author:中意灬
# @File:3..py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np
name=['长津湖','战狼2','你好,李焕英','哪吒之魔童降世','流浪地球','唐人街探案3','红海行动','唐人街探案2','美人鱼','我和我的祖国']
num=[56.95,56.94,54.13,50.35,46.86,45.23,36.51,33.97,33.91,31.69]
plt.rcParams['font.sans-serif']=['SimHei']#处理中文问题
plt.figure()#准备画布
plt.bar(name,num)#绘制条形图
plt.ylabel('票房(单位:亿)',fontsize=20)#设置y轴标签,fontsize表示字体大小
plt.xlabel('片名',fontsize=20)#设置x轴标签,fontsize表示字体大小
plt.title('中国电影票房前十排名')#设置题目
for a,b in zip(name,num):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
plt.show()

运行结果:
在这里插入图片描述

4.为了对某一产品合理定价,对这个产品进行预售模式,发现价格和需求量数据如下: 在这里插入图片描述 画出价格需求图和价格与收入图,大概分析应定价多少。

# @Time:2021/12/1014:57
# @Author:中意灬
# @File:3.py
# @ps:tutu qqnum:2117472285
from matplotlib import  pyplot as plt
import numpy as np

price=[30,40,60,70,80,90,95]
num=[135,120,100,65,50,45,40]
plt.figure()#准备画布
plt.rcParams['font.sans-serif']=['SimHei']#中文问题

ax=plt.subplot(211)#将画布分为两块,取第一块
ax.plot(num,price,c='r',marker='o')#绘图
ax.set_ylabel('价格')#设置y轴的标签
ax.set_xlabel('销量')#设置x轴的标签
ax.legend(labels=['价格需求'])#设置图例
for a, b in zip(num, price):
    plt.text(a, b, (a,b), ha='center', va='bottom', fontsize=10,c='black')#显示x轴对应的标签,ha表示水平对其方式,va表示垂直对其方式,fontsize表示字体大小,c表示颜色

price=np.array(price)#将price转换成数组
num=np.array(num)#将num转化成数组
b=price*num
bx=plt.subplot(212)#取画布第二块
bx.plot(num,b,marker='o')#marker表示标记形状
bx.set_xlabel('价格')#设置x轴标签
bx.set_ylabel('收入')#设置有轴标签
bx.legend(labels=['价格与收入'])#设置图例
for a, b in zip(num, b):
    plt.text(a, b, a, ha='center', va='bottom', fontsize=10,c='black')
plt.tight_layout()#调整多图被截断或遮挡等情况
plt.show()
print('由图可知,收益最大化的定价为100')

运行结果:
在这里插入图片描述
在这里插入图片描述

5.某班男性身高和女性身高如下,算出其平均值,标准差,并画出柱状图进行分析 在这里插入图片描述

# @Time:2021/12/1016:46
# @Author:中意灬
# @File:5.py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np

#各个身高区间人数统计
def countNum(list,x):
    # list = [0,0,0,0,0,0,0,0,0,0]
    for i in x:
        if 150 < i <= 155:
            list[0]=list[0]+1
        if 155 < i <= 160:
            list[1]=list[1]+1
        if 160 < i <= 165:
            list[2]=list[2]+1
        if 165 < i <= 170:
            list[3]=list[3]+1
        if 170 < i <= 175:
            list[4]=list[4]+1
        if 175 < i <= 180:
            list[5]=list[5]+1
        if 180 < i <= 185:
            list[6]=list[6]+1
        if 185 < i <= 190:
            list[7]=list[7]+1

boys=[172,171,185,188,169,181,172,175,180,179,170,171]
grils=[155,158,171,165,170,166,168,162,164,164,160,163]
boys=np.array(boys)#将boys转化为数组
grils=np.array(grils)#将girls转化为数组
boys_avg=np.average(boys)#求男生身高的平均值
grils_avg=np.average(grils)#求女生身高的平均值
boys_std=np.std(boys)#求男生身高的标准差
grils_std=np.std(grils)#求女生身高的标准差
print("男生身高平均值:%.2fcm"%boys_avg,"男生身高方差:%.2f"%boys_std)
print("女生身高平均值:%.2fcm"%grils_avg,"女生身高方差:%.2f"%grils_std)
#绘图
plt.rcParams['font.sans-serif']=['SimHei']#处理中文问题
plt.figure()#生成画布
width=0.2#条形图的宽度
x=np.arange(8)#生成0-7的一位数组
boynum=np.zeros_like(x)#初始化
girlnum=np.zeros_like(x)#初始化
countNum(boynum,boys)#统计出各男生身高段的人数
countNum(girlnum,grils)#统计出各女生身高段的人数
boy=plt.bar(x-width/2,width=width,height=boynum)#绘制男生的条形图,width为宽度,height为高度
gril=plt.bar(x+width/2,width=width,height=girlnum)#绘制女生的条形图,width为宽度,height为高度
fanwei=['150-155','155-160','160-165','165-170','170-175','175-180','180-185','185-190']#身高各区间范围
plt.xticks(x,fanwei,rotation=10)#设置x轴各点对应的标签,rotation旋转角度
plt.xlabel('身高区间')#设置x轴的标签
plt.ylabel('人数')#设置y轴的标签
plt.legend([boy,gril],labels=['男生','女生'],loc='upper left')#设置图例,loc表示图例位置
for a, b in zip(grils,girlnum):
    plt.text(a, b,b,ha='center', va='bottom', fontsize=20,c='black')
for a, b in zip(boynum,boys):
    plt.text(a, b,a,ha='center',va='bottom', fontsize=10,c='black')
plt.show()

运行结果:
在这里插入图片描述
在这里插入图片描述

7.查看第七次人口普查数据,画出重庆受教育程度人数的饼状图,画出重庆,四川,北京,上海,浙江,云南,贵州,西藏高中以上受教育成都的人数占当地总人数百分比的柱状图,并做分析。

# @Time:2021/12/1018:15
# @Author:中意灬
# @File:6.py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np
a1=15412#大专以上学历
a2=15956#高中(含中专)学历
a3=30582#初中学历
a4=29894#小学学历
a5=8156#文盲
edu_num=[a1,a2,a3,a4,a5]

plt.rcParams['font.sans-serif']='SimHei'#中文问题
plt.figure()

label=["大专以上学历","高中(含中专)学历","初中学历","小学学历","文盲"]
explode=[0.01,0.01,0.01,0.01,0.01]
color=['red','orange','yellow','green','blue']
plt.pie(edu_num,labels=label,explode=explode,autopct='%1.1f%%',colors=color,shadow=True)#labels表示标签,explode表示各板块离开中心的距离,autopct标签饼图百分比设置,colors表示颜色,shadow表示阴影(增加立体感)
plt.legend(loc='upper left', bbox_to_anchor=(-0.35,1.01))#设置标签,bbox_to_anchor表示设置的绝对位置
plt.title('重庆每十万人中受教育的人数的程度')#设置标题
plt.tight_layout#调整多图被截断或遮挡等情况
plt.show()

运行结果:
在这里插入图片描述

# @Time:2021/12/1018:45
# @Author:中意灬
# @File:7.py
# @ps:tutu qqnum:2117472285
from matplotlib import pyplot as plt
import numpy as np
a1=15412#重庆
a2=13267#四川
a3=41980#北京
a4=33872#上海
a5=16990#浙江
a6=11601#云南
a7=10952#贵州
a8=11019#西藏
a9=10
a=[a1,a2,a3,a4,a5,a6,a7,a8]
b=[]
for i in a:
    b.append(round(i/a9)/100)#四舍五入百分比
city=['重庆','四川','北京','上海','浙江','云南','贵州','西藏']
plt.rcParams['font.sans-serif']=['SimHei']#处理中文显现问题
plt.figure()
base_num=plt.bar(city,height=100000)#绘制条形图,height表示高度
edu_num=plt.bar(city,height=a)#绘制条形图,height表示高度
for x,y in zip(city,b):
    plt.text(x,y,'%.2f%%'%y, ha='center',va='bottom',fontsize=10,c='black')#ha表示水平对齐方式,va表示锤子对其方式,fontsize表示字体大小
plt.xlabel('城市')#设置x轴标签
plt.ylabel('人数')#设置y轴标签
plt.title('每10万人口中高中以上学历的人数占比')#设置题目
plt.legend([base_num,edu_num],labels=['十万人','高中以上学历'],bbox_to_anchor=(0.8,0.99))#设置标签,bbox_to_anchor设置绝对位置
plt.tight_layout#调整多图被截断或遮挡等情况
plt.show()
print("由图可知,经济越高的地区,受教育程度较高")

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值