Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 移动Seaborn线型图中记号标记的位置_Python_Python 3.x_Matplotlib_Seaborn - Fatal编程技术网

Python 移动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

我用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_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()
      

      我和你一样担心这是否是个好主意。这是我和我的合著者反复讨论的问题。感谢您提供了非常高效的解决方案!我和你一样担心这是否是个好主意。这是我和我的合著者反复讨论的问题。感谢您提供了非常高效的解决方案!哇,这可能是我和我的合著者讨论的一个解决方案。谢谢哇,这可能是我和我的合著者讨论的一个解决方案。谢谢