Matplotlib(二)

1. 墨尔本1981年至1990年的每月温度情况

  • 请利用数据,画出如下的图:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ex1 = pd.read_csv('./layout_ex1.csv')
pat = '(\d{4})-(\d{2})'
ex1.Time.str.extract(pat)# 注意extract 与 extractall 的区别。
'''
in extract ,it will show only one .
in extractall ,it will show all ,it may have two and more.
'''
ex1Copy = ex1.copy()
ex1Copy['year'] = ex1.Time.str.extract(pat)[0]
ex1Copy['month'] = ex1.Time.str.extract(pat)[1]
ex1Group = ex1Copy.groupby('year')# 这里得到了相关的数据
fig, axs = plt.subplots(2,5,figsize=(18,5) ,sharex=True, sharey=True)# 画图的相关设置
fig.suptitle('墨尔本')
i = 0
for year, data in ex1Group:
    axs[int(i/5)][i%5].plot(data['month'],data['Temperature'])
    axs[int(i/5)][i%5].set_title(year)
    if i%5 == 0 : axs[int(i/5)][i%5].set_ylabel('温度')
    i+=1
fig.tight_layout()

在这里插入图片描述

2. 画出数据的散点图和边际分布

  • np.random.randn(2, 150) 生成一组二维数据,使用两种非均匀子图的分割方法,做出该数据对应的散点图和边际分布图
fig = plt.figure()
spec = fig.add_gridspec(nrows=2, ncols=2,height_ratios=[1,5], width_ratios=[10,1])
data = np.random.randn(2, 150)

# 图0,0的数据
temp = data[0].max()-data[0].min()
temp_spe = temp/10
temp_count =[]
for i in range(10):
    in_min=data[0].min()+i*temp_spe
    in_max=data[0].min()+(i+1)*temp_spe
    temp_count.append(len(np.where((data[0]>=in_min)&(data[0]<in_max))[0]))
temp_count[-1]+=1
dy1 = temp_count
dx1 = [data[0].min()+temp_spe/2+i*temp_spe for i in range(10)]

# 图1,1的数据
temp = data[1].max()-data[1].min()
temp_spe = temp/10
temp_count =[]
for i in range(10):
    in_min=data[1].min()+i*temp_spe
    in_max=data[1].min()+(i+1)*temp_spe
    temp_count.append(len(np.where((data[1]>=in_min)&(data[1]<in_max))[0]))
temp_count[-1]+=1
dy2 = temp_count
dx2 = [data[1].min()+temp_spe/2+i*temp_spe for i in range(10)]

# 画图
ax = fig.add_subplot(spec[1,0])
ax.scatter(data[0],data[1])
ax.set_xlabel('my_data_x')
ax.set_ylabel('my_data_y')
ax.grid(True)
ax = fig.add_subplot(spec[0,0])
ax.bar(dx1,dy1)
ax.axis('off')
ax = fig.add_subplot(spec[1,1])
ax.axis('off')
ax.barh(dx2,dy2)
<BarContainer object of 10 artists>

在这里插入图片描述

temp = data[0].max()-data[0].min()
temp_spe = temp/10
temp_count =[]
for i in range(10):
    in_min=data[0].min()+i*temp_spe
    in_max=data[0].min()+(i+1)*temp_spe
    print(np.where(data[0]>in_min&data[0]<in_max).count())
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-121-f3f1e539e9fd> in <module>
      5     in_min=data[0].min()+i*temp_spe
      6     in_max=data[0].min()+(i+1)*temp_spe
----> 7     print(np.where(data[0]>in_min&data[0]<in_max).count())


TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

== 这里报错的原因 ==

data[0]>in_min&data[0]<in_max应该改写为(data[0]>in_min)&(data[0]<in_max)

'''
别人的代码
https://blog.csdn.net/weixin_43655282/article/details/111461333
'''
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import pandas as pd
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus'] = False #设置正常显示字符

data = pd.read_csv('./layout_ex1.csv')

fig, axs = plt.subplots(2,5,figsize=(20,5),sharex=True,sharey=True)
fig.suptitle('墨尔本1981年至1990年月温度曲线',size=20)

index = 0
for i in range(2):
    for j in range(5):
        axs[i][j].plot(np.arange(1,13),data['Temperature'].values[index*12:(index*12+12)],'o-')#因为一年有12个月,所以利用切片的方法,没隔12个月切一次片,认为是一年。
        axs[i][j].set_title('%s年'%data['Time'].values[index][:4])# 同样利用切片的方式
        axs[i][j].xaxis.set_major_locator(MultipleLocator(1)) #把横坐标设置为1的倍数
        axs[i][j].yaxis.set_major_locator(MultipleLocator(5)) #把纵坐标设置为5的倍数
        if(j==0):
            axs[i][j].set_ylabel('气温')
        index += 1

fig.tight_layout()

在这里插入图片描述

'''
别人的代码
https://blog.csdn.net/weixin_43655282/article/details/111461333
'''
import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(2, 150)
fig = plt.figure(figsize=(7,7))
spec = fig.add_gridspec(9,9,width_ratios=np.ones((9)),height_ratios=np.ones((9)))

ax1 = fig.add_subplot(spec[2:9,0:7])
ax2 = fig.add_subplot(spec[0:2,0:7],sharex=ax1) # 与子图1共享x坐标
ax3 = fig.add_subplot(spec[2:9,7:9],sharey=ax1) # 与子图1共享y坐标

#第一个子图
ax1.scatter(data[0],data[1])
ax1.set_ylabel('my_data_y',fontsize=10)
ax1.set_xlabel('my_data_y',fontsize=10)
ax1.grid(True)

#第二个子图
ax2.hist(data[0,:],rwidth=0.94)
# 隐藏x轴标度
ax2.get_xaxis().set_visible(False)
# 隐藏y轴标度
ax2.get_yaxis().set_visible(False)
# 关闭边框
for spine in ax2.spines.values():
    spine.set_visible(False)

#第三个子图
ax3.hist(data[1,:],rwidth=0.94, orientation='horizontal')
# 隐藏x轴标度
ax3.get_xaxis().set_visible(False)
# 隐藏y轴标度
ax3.get_yaxis().set_visible(False)
# 关闭边框
for spine in ax3.spines.values():
    spine.set_visible(False)

fig.tight_layout()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值