• <bdo id='UAbti'></bdo><ul id='UAbti'></ul>

      1. <legend id='UAbti'><style id='UAbti'><dir id='UAbti'><q id='UAbti'></q></dir></style></legend>
      2. <tfoot id='UAbti'></tfoot>
        <i id='UAbti'><tr id='UAbti'><dt id='UAbti'><q id='UAbti'><span id='UAbti'><b id='UAbti'><form id='UAbti'><ins id='UAbti'></ins><ul id='UAbti'></ul><sub id='UAbti'></sub></form><legend id='UAbti'></legend><bdo id='UAbti'><pre id='UAbti'><center id='UAbti'></center></pre></bdo></b><th id='UAbti'></th></span></q></dt></tr></i><div id='UAbti'><tfoot id='UAbti'></tfoot><dl id='UAbti'><fieldset id='UAbti'></fieldset></dl></div>

        <small id='UAbti'></small><noframes id='UAbti'>

        如何在极坐标 matplotlib 图中旋转刻度标签?

        时间:2023-07-03
        <tfoot id='8vXZu'></tfoot>

            <legend id='8vXZu'><style id='8vXZu'><dir id='8vXZu'><q id='8vXZu'></q></dir></style></legend>
            • <bdo id='8vXZu'></bdo><ul id='8vXZu'></ul>
              <i id='8vXZu'><tr id='8vXZu'><dt id='8vXZu'><q id='8vXZu'><span id='8vXZu'><b id='8vXZu'><form id='8vXZu'><ins id='8vXZu'></ins><ul id='8vXZu'></ul><sub id='8vXZu'></sub></form><legend id='8vXZu'></legend><bdo id='8vXZu'><pre id='8vXZu'><center id='8vXZu'></center></pre></bdo></b><th id='8vXZu'></th></span></q></dt></tr></i><div id='8vXZu'><tfoot id='8vXZu'></tfoot><dl id='8vXZu'><fieldset id='8vXZu'></fieldset></dl></div>

                  <tbody id='8vXZu'></tbody>

                  <small id='8vXZu'></small><noframes id='8vXZu'>

                  本文介绍了如何在极坐标 matplotlib 图中旋转刻度标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有很长的标识符,我想制作一个径向图,其中刻度都在不同的角度.例如,右侧 0 度处的第一个刻度应具有 0 度角.顶部的那个应该是 90 度.左边 270 度的那个应该是 0 度.我希望它看起来让人想起径向树状图.使用 matplotlib 2.0.2python 3.6.2

                  I have long identifiers and I would like to make a radial plot where ticks are all at different angles. For example, the first tick on the right at 0 degrees should have a 0 degree angle. The one at the top should be 90 degrees. The one at 270 degrees on the left should be 0 degrees. I want it to look reminiscent of a radial dendrogram. Using matplotlib 2.0.2 and python 3.6.2

                  这是否可以在 matplotlib 中旋转单个刻度标签或单独添加文本标签?

                  设置 ax.set_rticks([]) 会在添加散点和线时扭曲绘图.label.get_position() 中的位置大大偏移了绘图右侧的标签.

                  Setting ax.set_rticks([]) distorts the plot when adding the scatter points and lines. The positions from label.get_position() offset the labels considerably to the right of the plot.

                  有没有办法使用角度和幅度坐标?

                  import pandas as pd
                  import matplotlib.pyplot as plt
                  import numpy as np
                  
                  data = {'0-b__|ce0Ji|aaaiIi9abGc_|ti5l-baa1tcciii|irGi': 0.28774963897009614, '0-b__|ce0Ji|aaaiIi9abGc_|ti6l-baa1tcciii|irGi': 0.18366735937444964, 'allb_e__|tla1a|ali|_auc7en_|e': -0.11720263463773731, 'b__0|lp|..ii80p.e7l_|an4obln.llll0ai|': -0.021168680215561269, 'b__Ass8._ii8.c4on|Ay|mbessoxiAxa': 0.17845443978725653, 'b__Bts4o_rrtiordae|Bei|obe7rattrniBno': 0.32077066676059313, 'b__|aaa|tteiatlim_|e1rblttaaeei|e': -0.27915536613715614, 'b__|as4.|ei2.l7ov_|e0tblaaoxi|xa': 0.43309499489274772, 'b__|as4.|ei2.l7ov_|e9tblaaoxi|xa': 0.47835581698425556, 'b__|cu|ppripcae_|co2tbopnccpei|': -0.20330386390053184, 'b__|eoea|cccimacnuuh_|ra0obarceenbi|ba': 0.062889648127927869, 'b__|oa|ggrigoip_|nr6ybmgvoohii|i': -0.045648268817583035, 'b__|p1|ooiioi4rs_|sr5eba0otsoi|ox': -0.52544820541720971, 'b__|paa|piatgn_|hy1cboippoli|la': 0.27260399422352155, 'b__|triu|mmriumay_|eb4ebcimrttnhi|hc': 0.62680074671550845, 'b__|tru|mmriumad_|eb2obcmittisi|': 0.34780388151174668, 'etob_m__|aol2l|ooeui|_lool7r': 0.4856468599203973, 'etpb_s__|apl2l|lleni|_loll8e': 0.24430277200521291, 'ib__rCalc_hhdiorchubai|CSt|absahodrsiCsaaca': -0.13484907188897891, 'nlab___|oa1i|ssni|_iesa9': 0.13636363636363635, 'nlnb_i__|dn1t|rrnfi|_tera8ig_|e': -0.056954668733049205, 'nrfb_h__|afl3r|ssnti|_resl3yn_': 0.56102285935683849, 'o5b__l|rcoa|eecialaeprh_|as1o5bie0trrnlii|irLa': 0.53377831002782572, 'oelb_a__Aelt3_rrovi__rro|a': 0.32230284245007218, 'oelb_a__Aelt4_rrovi__rro|a': 0.16580958754534889, 'porb_i__Ctrc6c_oopci__cloa|ny|C': 0.38260364199922509, 'porb_i__Ctrc7g_rrpci__glra|ay|C': 0.51829805219964076, 'ptab_a__|hac2b|uupci|_boui3ct_|': 0.50873516255151285, 'reab_a__|aa2a|rrrhi|_axrl4ra_|': -0.47742242259871087, 'sb__o|sSac|ccnibocsctlhd_|a0dbuacmssioai|anCca': 0.42733612764608503, 'teob___|oa1b|iiti|_bnil3': -0.32684653587404461, 'uoib_i__|ia2a|bbuli|_arbi2it': -0.13636363636363635}
                  Se_corr = pd.Series(data, name="correlation")
                  
                  
                  def plot_polar(r):
                      with plt.style.context("seaborn-whitegrid"):
                          fig = plt.figure(figsize=(10,10))
                          ax = fig.add_subplot(111, polar=True)
                          ax.set_rmax(2)
                  #         ax.set_rticks([])
                          ticks= np.linspace(0, 360, r.index.size + 1) [:-1]
                  
                          ax.set_xticks(np.deg2rad(ticks))
                          ax.set_xticklabels(r.index, fontsize=15,)
                  
                          angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels()))
                          angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
                          angles = np.rad2deg(angles)
                  
                          for i, theta in enumerate(angles):
                              ax.plot([theta,theta], [0,r[i]], color="black")
                              ax.scatter(x=theta,y=r[i], color="black")
                  
                  
                          labels = []
                          for label, theta in zip(ax.get_xticklabels(), angles):
                              x,y = label.get_position()
                              lab = ax.text(x, y, label.get_text(), transform=label.get_transform(),
                                            ha=label.get_ha(), va=label.get_va())
                              lab.set_rotation(theta)
                              labels.append(lab)
                          ax.set_xticklabels([])
                  
                      return fig, ax 
                  fig,ax = plot_polar(Se_corr)
                  

                  推荐答案

                  旋转极坐标图的刻度标签可能不像通常的笛卡尔图那么容易.对于笛卡尔图,可以简单地做类似的事情

                  Rotating the ticklabels for a polar plot may be not as easy as for a usual cartesian plot. For a cartesian plot, one can simply do something like

                  for label in ax.get_xticklabels():
                      label.set_rotation(...)
                  

                  这不适用于极坐标图,因为它们的旋转在绘制时重置为 0 度.

                  This does not work for a polar plot, because their rotation is reset at draw time to 0 degrees.

                  想到的一个选项是创建新的刻度标签作为额外的文本对象,这些对象复制刻度标签的属性,但可以具有持久的旋转.然后删除所有原始刻度标签.

                  One option that comes to mind is to create new ticklabels as additional text objects which copy the attributes of the ticklabels but can have a persistent rotation. Then remove all original ticklabels.

                  import numpy as np
                  import matplotlib.pyplot as plt
                  
                  r = np.arange(0, 2, 0.01)
                  theta = 2 * np.pi * r
                  
                  ax = plt.subplot(111, projection='polar')
                  ax.plot(theta, r)
                  ax.set_rmax(2)
                  ax.set_rticks([]) 
                  
                  
                  plt.gcf().canvas.draw()
                  angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
                  angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
                  angles = np.rad2deg(angles)
                  labels = []
                  for label, angle in zip(ax.get_xticklabels(), angles):
                      x,y = label.get_position()
                      lab = ax.text(x,y, label.get_text(), transform=label.get_transform(),
                                    ha=label.get_ha(), va=label.get_va())
                      lab.set_rotation(angle)
                      labels.append(lab)
                  ax.set_xticklabels([])
                  
                  plt.show()
                  

                  对于较长的标签,您可以使用标签的 y 坐标:

                  For longer labels you may play with the y coordinates of the labels:

                  import numpy as np
                  import matplotlib.pyplot as plt
                  
                  r = np.arange(0, 2, 0.01)
                  theta = 2 * np.pi * r
                  
                  ax = plt.subplot(111, projection='polar')
                  ax.plot(theta, r)
                  ax.set_rmax(2)
                  ax.set_rticks([])
                  ticks= np.linspace(0,360,9)[:-1] 
                  ax.set_xticks(np.deg2rad(ticks))
                  ticklabels = ["".join(np.random.choice(list("ABCDE"),size=15)) for _ in range(len(ticks))]
                  ax.set_xticklabels(ticklabels, fontsize=10)
                  
                  plt.gcf().canvas.draw()
                  angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
                  angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
                  angles = np.rad2deg(angles)
                  labels = []
                  for label, angle in zip(ax.get_xticklabels(), angles):
                      x,y = label.get_position()
                      lab = ax.text(x,y-.65, label.get_text(), transform=label.get_transform(),
                                    ha=label.get_ha(), va=label.get_va())
                      lab.set_rotation(angle)
                      labels.append(lab)
                  ax.set_xticklabels([])
                  
                  plt.subplots_adjust(top=0.68,bottom=0.32,left=0.05,right=0.95)
                  plt.show()
                  

                  <小时>已编辑问题代码的更正版本:


                  Corrected version of the edited question's code:

                  import pandas as pd
                  import matplotlib.pyplot as plt
                  import numpy as np
                  
                  data = {'0-b__|ce0Ji|aaaiIi9abGc_|ti5l-baa1tcciii|irGi': 0.28774963897009614, '0-b__|ce0Ji|aaaiIi9abGc_|ti6l-baa1tcciii|irGi': 0.18366735937444964, 'allb_e__|tla1a|ali|_auc7en_|e': -0.11720263463773731, 'b__0|lp|..ii80p.e7l_|an4obln.llll0ai|': -0.021168680215561269, 'b__Ass8._ii8.c4on|Ay|mbessoxiAxa': 0.17845443978725653, 'b__Bts4o_rrtiordae|Bei|obe7rattrniBno': 0.32077066676059313, 'b__|aaa|tteiatlim_|e1rblttaaeei|e': -0.27915536613715614, 'b__|as4.|ei2.l7ov_|e0tblaaoxi|xa': 0.43309499489274772, 'b__|as4.|ei2.l7ov_|e9tblaaoxi|xa': 0.47835581698425556, 'b__|cu|ppripcae_|co2tbopnccpei|': -0.20330386390053184, 'b__|eoea|cccimacnuuh_|ra0obarceenbi|ba': 0.062889648127927869, 'b__|oa|ggrigoip_|nr6ybmgvoohii|i': -0.045648268817583035, 'b__|p1|ooiioi4rs_|sr5eba0otsoi|ox': -0.52544820541720971, 'b__|paa|piatgn_|hy1cboippoli|la': 0.27260399422352155, 'b__|triu|mmriumay_|eb4ebcimrttnhi|hc': 0.62680074671550845, 'b__|tru|mmriumad_|eb2obcmittisi|': 0.34780388151174668, 'etob_m__|aol2l|ooeui|_lool7r': 0.4856468599203973, 'etpb_s__|apl2l|lleni|_loll8e': 0.24430277200521291, 'ib__rCalc_hhdiorchubai|CSt|absahodrsiCsaaca': -0.13484907188897891, 'nlab___|oa1i|ssni|_iesa9': 0.13636363636363635, 'nlnb_i__|dn1t|rrnfi|_tera8ig_|e': -0.056954668733049205, 'nrfb_h__|afl3r|ssnti|_resl3yn_': 0.56102285935683849, 'o5b__l|rcoa|eecialaeprh_|as1o5bie0trrnlii|irLa': 0.53377831002782572, 'oelb_a__Aelt3_rrovi__rro|a': 0.32230284245007218, 'oelb_a__Aelt4_rrovi__rro|a': 0.16580958754534889, 'porb_i__Ctrc6c_oopci__cloa|ny|C': 0.38260364199922509, 'porb_i__Ctrc7g_rrpci__glra|ay|C': 0.51829805219964076, 'ptab_a__|hac2b|uupci|_boui3ct_|': 0.50873516255151285, 'reab_a__|aa2a|rrrhi|_axrl4ra_|': -0.47742242259871087, 'sb__o|sSac|ccnibocsctlhd_|a0dbuacmssioai|anCca': 0.42733612764608503, 'teob___|oa1b|iiti|_bnil3': -0.32684653587404461, 'uoib_i__|ia2a|bbuli|_arbi2it': -0.13636363636363635}
                  Se_corr = pd.Series(data, name="correlation")
                  
                  
                  def plot_polar(r):
                  with plt.style.context("seaborn-whitegrid"):
                      fig = plt.figure(figsize=(10,10))
                      ax = fig.add_subplot(111, polar=True)
                      ax.set_rmax(2)
                      #ax.set_rticks([])
                      ticks= np.linspace(0, 360, r.index.size + 1)[:-1]
                  
                      ax.set_xticks(np.deg2rad(ticks))
                      ax.set_xticklabels(r.index, fontsize=15,)
                  
                      angles = np.linspace(0,2*np.pi,len(ax.get_xticklabels())+1)
                      angles[np.cos(angles) < 0] = angles[np.cos(angles) < 0] + np.pi
                      angles = np.rad2deg(angles)
                  
                      for i, theta in enumerate(angles[:-1]):
                          ax.plot([theta,theta], [0,r[i]], color="black")
                          ax.scatter(x=theta,y=r[i], color="black")
                  
                      fig.canvas.draw()
                      labels = []
                      for label, theta in zip(ax.get_xticklabels(), angles):
                          x,y = label.get_position()
                          lab = ax.text(x, y, label.get_text(), transform=label.get_transform(),
                                        ha=label.get_ha(), va=label.get_va())
                          lab.set_rotation(theta)
                          labels.append(lab)
                      ax.set_xticklabels([])
                  
                  return fig, ax 
                  fig,ax = plot_polar(Se_corr)
                  plt.show()

                  ;该代码生成的图像

                  这篇关于如何在极坐标 matplotlib 图中旋转刻度标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:scipy.ndimage.interpolation.rotate 之后旋转的图像坐标? 下一篇:如何使用 scipy.ndimage.interpolation.affine_transform 围绕其中心旋转图像?

                  相关文章

                  • <bdo id='sQNV0'></bdo><ul id='sQNV0'></ul>

                  1. <small id='sQNV0'></small><noframes id='sQNV0'>

                    <tfoot id='sQNV0'></tfoot>
                    <legend id='sQNV0'><style id='sQNV0'><dir id='sQNV0'><q id='sQNV0'></q></dir></style></legend>

                    <i id='sQNV0'><tr id='sQNV0'><dt id='sQNV0'><q id='sQNV0'><span id='sQNV0'><b id='sQNV0'><form id='sQNV0'><ins id='sQNV0'></ins><ul id='sQNV0'></ul><sub id='sQNV0'></sub></form><legend id='sQNV0'></legend><bdo id='sQNV0'><pre id='sQNV0'><center id='sQNV0'></center></pre></bdo></b><th id='sQNV0'></th></span></q></dt></tr></i><div id='sQNV0'><tfoot id='sQNV0'></tfoot><dl id='sQNV0'><fieldset id='sQNV0'></fieldset></dl></div>