web-dev-qa-db-ja.com

Plotly R:軸ラベルと軸目盛りラベル間の間隔の設定

マージンを変更する以外に、軸ラベルと軸目盛りラベルの間隔を設定する方法はありますか?

プロットの例:

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))

上記のプロット例のように、y軸のタイトルはこの軸の目盛りラベルと重なっています。それらの間に間隔を設定する方法はありますか?

10
r4ndomw4lk

左マージンを増やす @ Codutieが彼の答えで示唆しているように は、ある程度の助けになります(少なくともPlotly v4.7.1 +では)。下のスクリーンショットに示すように、左側の150ピクセルのマージンのほとんどは無駄なスペースです。 enter image description here

上記のプロットを生成するRコード(@Codutieから):

_library(plotly)

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
  layout(margin = list(l = 150, r = 20, b = 10, t = 10))
_

Plotlyはレスポンシブであるという目標のために、レイアウトのスケーリングの多くを自動的に実行します。見栄えのよいグラフを取得するためにあまりいじくる必要がないので、これは一般的に私見にとって良いことです。もちろん、Plotlyの自動スケーリングの結果は、必ずしも完璧ではないか、正確に達成したいわけではありません。そのため、 専用の(レイアウト)属性がたくさんあります プロットの特定の側面を操作できます。 残念ながら、軸ラベルと軸自体の間の距離を設定する属性はありません(または軸目盛りラベル)。

代わりに、適切なy軸のタイトル文字列を設定することにより、軸とそのラベルの間の距離を操作するために次の回避策を利用できます。

_plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
    layout(margin = list(l = 150, r = 20, b = 10, t = 10),
           yaxis = list(title = paste0(c(rep(" ", 20),
                                         "Gross horsepower",
                                         rep(" ", 20),
                                         rep("\n ", 3)),
                                       collapse = "")))
_

これは次の結果になります: enter image description here

Y軸のタイトルコンポーネントの説明:

  • rep("\n ", 3):これは、距離を増やすためのトリックの主要部分です。実際のタイトル(_"Gross horsepower"_)に改行と改行しないスペースを追加するだけです。
  • rep(" ", 20):これは、Plotlyの自動スケーリングが再び干渉しないようにするための追加の手段です–実際のタイトルを改行しない40のスペースでラップします(もちろん、多かれ少なかれあります)。そうでない場合、テキストGross horsepowerは、プロットの高さが「物理的に」それを可能にするのに十分な大きさになるとすぐに、2つの軸ティックの間に配置されます。同じ距離を再び達成するために、はるかに大きな改行-非改行スペース-コンボを使用する必要があるため、さらに重要なことには、距離はプロットの高さに依存するためです。上のプロットでは、クリティカルポイントに到達するために1000pxを超える高さでプロットを表示する必要があるのと同じくらい多くのy軸の目盛りがあるため、これは実際には必要ありません。
9
Salim B

次のようにマージンをグラフに追加して、マージンを変更してみることができます。

m <- list(l=150, r=20, b=10, t=10) # l = left; r = right; t = top; b = bottom
plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>% layout(margin=m)

お役に立てれば?

2
Codutie

Pythonでこれに対処する方法は、単に改行を追加してから空白を追加することでした。本質的に、空白を入れて分離を作成できます。ハッキーですが、動作します。 2行目。

 yaxis=go.layout.YAxis(
    title_text="<b>Number of Articles<br> </b>",
    titlefont=dict(size=12)),
    paper_bgcolor="white",
    title=go.layout.Title(
    xref="paper",
    x=0.5 
  )

変更前:

Before

後:

After

1
George Hayward

私が通常行うことは、ラベルの後ろに追加のスペースを作成できるticksuffixオプションを利用することです。

layout(
      xaxis = list(title = "", automargin=T, ticksuffix = "%")
     ,yaxis = list(title = "", automargin=T, ticksuffix = "   ")
)
0
Jeffreys