爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4633|回复: 6

python 画四象限图时如何标注中心0点?

[复制链接]

新浪微博达人勋

发表于 2022-10-22 19:47:25 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
如图,求问x、y轴交点处应该如何标注呢?
另外这个图真的有点丑,有没有建议可以从哪个角度优化一下看起来更好看?
1666439060549.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-10-22 20:49:22 | 显示全部楼层
本帖最后由 付亚男 于 2022-10-22 23:29 编辑

横纵坐标的ticks以及ticklabels分别设为[-6, -4, -2, 2, 4, 6]和[-8, -6, -4, -2, 2, 4, 6, 8],即把0空出来;然后ax.text在原点位置添加0的标签,设置偏移量,躲开坐标轴即可。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-10-24 10:16:19 | 显示全部楼层
付亚男 发表于 2022-10-22 20:49
横纵坐标的ticks以及ticklabels分别设为[-6, -4, -2, 2, 4, 6]和[-8, -6, -4, -2, 2, 4, 6, 8],即把0空出 ...

感谢感谢~~之前那都用的NCL,现在发现python真的好方便~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-8-31 11:17:17 | 显示全部楼层
楼主可否分享一下四象限图代码
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-8-31 11:35:06 | 显示全部楼层
我的代码比较简单,方便的话可以留一个邮箱我发给你~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2023-9-11 15:15:08 | 显示全部楼层
一顾留白 发表于 2023-8-31 11:35
我的代码比较简单,方便的话可以留一个邮箱我发给你~

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

使用道具 举报

新浪微博达人勋

 楼主| 发表于 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()
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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