Python 移动Seaborn线型图中记号标记的位置
我用seaborn软件包做了一个情节。代码如下:Python 移动Seaborn线型图中记号标记的位置,python,python-3.x,matplotlib,seaborn,Python,Python 3.x,Matplotlib,Seaborn,我用seaborn软件包做了一个情节。代码如下: ax = sns.pointplot(x='latency_condition', y='flow', color=colors[0], ci=95, data=df_new, scale=.5, linestyles='dotted', errwidth=2, capsize=.3) ax.set_xticklabels(ax.get_xticklabels(), rotation=45) ax.set_x
ax = sns.pointplot(x='latency_condition', y='flow', color=colors[0], ci=95, data=df_new,
scale=.5, linestyles='dotted', errwidth=2, capsize=.3)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
ax.set_xlabel("E(latency)", fontweight='bold')
ax.set_ylabel("Flow score", fontweight='bold')
ax.set_yticklabels(['min','','','neutral','','','max'])
ax.set(ylim = (10,70))
plt.axhline(y=40, color=colors[3], linestyle='--', linewidth=1)
plt.savefig("fig4_flow.pdf", bbox_inches='tight')
plt.show()
这一切都很好。现在,我在x轴上有一个区间级别的分类级别。它们代表延迟值,不幸的是,它们是“丑陋的”:[162245328412495578]
例如,我希望我的x轴每100个有记号,以提高可读性。然而,seaborn将它们(正确地)视为分类级别,所以我不能仅仅改变x轴
我想做的是:
- 拆下当前的XTICK并更换为新的XTICK(例如每100个)
- 这样做时,新的XTICK会尊重坐标系(因为旧的XTICK也是均匀分布的,代表基础的连续体)
- 我不认为这是个好主意
pointplot()
用于分类数据,而将其用于连续数据(即使x轴只取几个离散值)会带来麻烦
在任何情况下,在seaborn的pointplot()
中,分类变量的级别在坐标0,1,…,N-1处绘制在x轴上。由于您知道每个点的延迟值,因此只需进行线性插值即可找到所需的x值,以获得您选择的整数:
ticks = [162, 245, 328, 412, 495, 578]
new_ticks = [150,250,350,450,550]
df = pd.DataFrame({'value': np.random.random(size=(100,)), 'cat': np.random.choice(ticks, size=(100,))})
fig, (ax1, ax2)= plt.subplots(1,2, figsize=(8,4))
ax1.set_title('original')
sns.pointplot(x='cat',y='value',data=df, ax=ax1)
ax2.set_title('rescaled')
sns.pointplot(x='cat',y='value',data=df, ax=ax2)
x_ticks = ax2.get_xticks()
s = (x_ticks[-1]-x_ticks[0])/(ticks[-1]-ticks[0])
i = x_ticks[0] - s*ticks[0]
new_x_ticks = s*np.asarray(new_ticks) + i
ax2.set_xticks(new_x_ticks)
ax2.set_xticklabels(new_ticks)
我不认为这是个好主意
pointplot()
用于分类数据,而将其用于连续数据(即使x轴只取几个离散值)会带来麻烦
在任何情况下,在seaborn的pointplot()
中,分类变量的级别在坐标0,1,…,N-1处绘制在x轴上。由于您知道每个点的延迟值,因此只需进行线性插值即可找到所需的x值,以获得您选择的整数:
ticks = [162, 245, 328, 412, 495, 578]
new_ticks = [150,250,350,450,550]
df = pd.DataFrame({'value': np.random.random(size=(100,)), 'cat': np.random.choice(ticks, size=(100,))})
fig, (ax1, ax2)= plt.subplots(1,2, figsize=(8,4))
ax1.set_title('original')
sns.pointplot(x='cat',y='value',data=df, ax=ax1)
ax2.set_title('rescaled')
sns.pointplot(x='cat',y='value',data=df, ax=ax2)
x_ticks = ax2.get_xticks()
s = (x_ticks[-1]-x_ticks[0])/(ticks[-1]-ticks[0])
i = x_ticks[0] - s*ticks[0]
new_x_ticks = s*np.asarray(new_ticks) + i
ax2.set_xticks(new_x_ticks)
ax2.set_xticklabels(new_ticks)
一个想法是使用辅助x轴,并设置与点-0.5和5.5对应的限制:
导入matplotlib.pyplot作为plt
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
#创建一些随机数据
N=100
a=[1622453284122495578]
x=np.随机选择(a,N)
y=np.随机.正常(65-x/20,10,N)
df_new=pd.DataFrame({'latency_condition':x,'flow':y})
图,ax1=plt.子批次()
ax2=ax1.twny()
sns.pointplot(ax=ax2,x='latency_condition',y='flow',color='dodgerblue',ci=95,data=df_new,
比例=0.5,线型=虚线,宽度=2,倾覆=0.3)
#ax2.勾选参数(轴=x',旋转=45)
#ax1.勾选参数(轴=x',旋转=45)
ax2.set_xlabel(“”)
ax1.setxlabel(“E(延迟)”,fontwweight='bold')
ax1.set_xlim(1.5*a[0]-0.5*a[1],-0.5*a[-2]+1.5*a[-1])
ax1.设置标签(“流量分数”,fontwweight='bold')
ax1.设置标签(['min'、''、'neutral'、''、'max'])
ax1.set(ylim=(10,70))
ax1.axhline(y=40,color='crimson',linestyle=''--',linewidth=1)
#plt.savefig(“图4\u flow.pdf”,bbox\u inches='tight')
plt.紧_布局()
plt.show()
一个想法是使用辅助x轴,并设置与点-0.5和5.5对应的限制:
导入matplotlib.pyplot作为plt
导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
#创建一些随机数据
N=100
a=[1622453284122495578]
x=np.随机选择(a,N)
y=np.随机.正常(65-x/20,10,N)
df_new=pd.DataFrame({'latency_condition':x,'flow':y})
图,ax1=plt.子批次()
ax2=ax1.twny()
sns.pointplot(ax=ax2,x='latency_condition',y='flow',color='dodgerblue',ci=95,data=df_new,
比例=0.5,线型=虚线,宽度=2,倾覆=0.3)
#ax2.勾选参数(轴=x',旋转=45)
#ax1.勾选参数(轴=x',旋转=45)
ax2.set_xlabel(“”)
ax1.setxlabel(“E(延迟)”,fontwweight='bold')
ax1.set_xlim(1.5*a[0]-0.5*a[1],-0.5*a[-2]+1.5*a[-1])
ax1.设置标签(“流量分数”,fontwweight='bold')
ax1.设置标签(['min'、''、'neutral'、''、'max'])
ax1.set(ylim=(10,70))
ax1.axhline(y=40,color='crimson',linestyle=''--',linewidth=1)
#plt.savefig(“图4\u flow.pdf”,bbox\u inches='tight')
plt.紧_布局()
plt.show()
我和你一样担心这是否是个好主意。这是我和我的合著者反复讨论的问题。感谢您提供了非常高效的解决方案!我和你一样担心这是否是个好主意。这是我和我的合著者反复讨论的问题。感谢您提供了非常高效的解决方案!哇,这可能是我和我的合著者讨论的一个解决方案。谢谢哇,这可能是我和我的合著者讨论的一个解决方案。谢谢