- 积分
- 8196
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-7-3
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2023-9-11 15:35:09
|
显示全部楼层
突然想到可以直接粘贴代码,我把代码贴在下面了~~比较简单,希望对大家有帮助~
# coding=utf-8
import pandas as pd
import numpy as np
data = pd.DataFrame({"year":['MHW#1','MHW#2','MHW#3','MHW#4'],#'OBS','EM','1d','2d','3d'],
"Advo":[ -7.366952,-2.96779,-4.246695,-2.375467],
"Qneto":[3.773427,2.346211,0.8514552,0.245985],
"Adve":[-7.745013, -5.987818,-9,-9],
"Qnete":[3.339508,0.615182,-9,-9]})
#print(data)
colors = ["red","orange","blue","green"]
#为后续绘制散点图做准备
minx = min(data["Qnete"])
maxx = max(data["Qnete"])
miny = min(data["Adve"])
maxy = max(data["Adve"])
#绘图
import matplotlib.pyplot as plt
#设置图形大小和像素
plt.figure(figsize=(8,9),dpi=130)
plt.scatter(x=data["Qnete"],y=data["Adve"],c=colors,marker="*",s=200)#,c="black"表示点为黑色,s=35表示点的大小为35
plt.scatter(x=data["Qneto"],y=data["Advo"],c=colors,s=140)
#设置x轴的范围
#plt.rc('font',family='Times New Roman')
plt.xlim(xmin = -4.5,xmax=4.5)
#设置y轴的范围
plt.ylim(ymin= -8.5,ymax=8.5)
#添加水平直线
plt.axhline(y=0,ls="-",color="black",linewidth=2)#y=0表示水平线过y=0,ls设置线条类型,linewidth设置线条粗细
#添加垂直直线
plt.axvline(x=0,ls="-",color="black",linewidth=2)#x=0表示垂线过x=0,其余参数含义同上
#在指定位置添加横坐标标签
plt.text(4.2,-1.4,'Adv',fontsize=20)
plt.text(-1.3,8,'Qnet',fontsize=20)
plt.text(3,-6,'MHW#1',color="red",fontsize=20)
plt.text(2,-2,'MHW#2',color="orange",fontsize=20)
plt.text(0.7,-5.5,'MHW#3',color="blue",fontsize=20)
plt.text(-2.5,-2.5,'MHW#4',color="green",fontsize=20)
plt.title("(b) S>2", horizontalalignment='left',fontsize=23,x=0,y=1)
ax=plt.gca()
ax.spines['right'].set_color('none') #fontweight='heavy',只保留一条纵坐标轴,形成象限图
ax.spines['top'].set_color('none')
#ax.xaxis.set_ticks_position('bottom')
#ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
plt.xticks([-4, -3,-2,-1, 1,2,3, 4],['-4','-3','-2','-1','1','2','3','4'],fontsize=18)
plt.yticks([-8, -6,-4,-2, 2,4, 6],['-8','-6','-4','-2','2','4','6'],fontsize=18)
plt.text(0.1,-0.65,'0',fontsize=18)
plt.savefig("C:/Users/linl/Desktop/77/1201/0320/s2.eps", format='eps', dpi=1000)
#for i in range(len(data["year"])):#为每个气泡做标注
# plt.annotate(data["year"][i],xy=(data["Adv"][i],data["Qnet"][i]),xytext=(data["Adv"][i]+0.005,data["Qnet"][i]+0.005))
#plt.show()
#plt.text(x=0.1392,y=26.45,s='Adv',ha='left',va='top',fontdict=dict(fontsize=12, color='black',family='monospace',weight='bold'))
#plt.text(x=15,y=0.1,s='Qnet',ha='left',va='baseline',fontdict=dict(fontsize=12, color='black',family='monospace',weight='bold'))
#x=0.1392文本x轴坐标,可先随意生成一个图,然后通过鼠标在图上定位获得合适的值,再生成最佳的图
#y=26.45文本y轴坐标
#s='EVA':文本内容为‘EVA’
#ha设置字体的水平位置,可选'center', 'right', 'left'
#va设置字体的垂直位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
# fontdict对字体属性进行个性化设置
#fontsize:设置字号
# family:设置字体类型,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
# weight:设置字体磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
#在指定位置添加纵坐标标签
#plt.text(x=5.05,y=0.25,s='Qnet',ha='left',va='baseline',fontdict=dict(fontsize=12, color='black',family='monospace',weight='bold'))
#给每个点添加year标签
#for x,y,year in zip(data["Qnet"],data["Adv"],data["year"]): # zip函数将x,y,year数据一一对应,配对组合
#
# plt.text(x-0.2, y+0.6, '%s.' % year, ha='center', va='bottom', fontsize=10)
#y+0.5是为了让标签在点的上方不远处显示,如果需要标签在点的下方不远处显示可以设置为y-0.5,
#如果需要标签在点的右方不远处显示可以设置为x+0.5
#plt.axis('off')#不显示散点图原始坐标轴
#
#plt.show() |
|