Özetle: Eksen etiketleri ve çizim alanı arasındaki boşluk nasıl ayarlanır?
Plotly'de eksen etiketleri ve çizim alanı arasındaki boşluğu nasıl ayarlayabilirim? Özellikle eksen etiketleri ve çizim alanı arasındaki boşluğu azaltmakla ilgileniyorum. Örnek içeren bir ekran görüntüsü ekledim.

İşte yeniden üretilebilir kod pasajı:
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import plotly.express as px
import pandas as pd
import numpy as np
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
df = pd.read_csv("data.txt", sep='\t', parse_dates=["StartTimeRun", "EndTimeRun"])
df = df[df['Status'] != 'NOT_RUN']
df = df[df['Status2'] != 'NOT_RUN']
# assume you have a "long-form" data frame
# see https://plotly.com/python/px-arguments/ for more options
df_PASS = df.loc[df['Status'] == "PASS"]
df_FAIL = df.loc[df['Status'] == "FAIL"]
trace1 = go.Box(x=df_PASS["Duration(seconds)"], y=df_PASS["Keyword"], name="PASS", orientation='h', marker=dict(color='rgb(158,202,225)', line=dict(color='rgb(8,48,107)', width=1.5)))
trace2 = go.Box(x=df_FAIL["Duration(seconds)"], y=df_FAIL["Keyword"], name="FAIL", orientation='h', marker=dict(color='#fd9668', line=dict(color='rgb(8,48,107)', width=1.5)))
fig = {
'data': [trace1, trace2],
'layout':
go.Layout(
boxmode='group', margin=dict(l=200, r=150)
)
}
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure=fig
)
])
if __name__ == '__main__':
app.run_server(debug=True)
Ve işte veri çerçevesi (data.txt):
SuiteName Test Status Keyword Status2 Duration(seconds) StartTimeRun EndTimeRun Type FileName
0SmokeTestDD Validate the use case for Single UE PASS BuiltIn.Run Keywords FAIL 12.619 20200809 06:45:18.515 20200809 06:45:31.134 setup output-20200809-064513.xml
0SmokeTestDD Validate the use case for Single UE PASS Validate the work flow PASS 34.56 20200809 06:45:31.135 20200809 06:49:25.695 kw output-20200809-064513.xml
0SmokeTestDD Validate the use case for Single UE PASS BuiltIn.Run Keywords PASS 15.344 20200809 06:49:25.695 20200809 06:49:41.039 teardown output-20200809-064513.xml
Validate the use case for Single UE Validate the work flow PASS Login To FAIL 8.502 20200809 06:45:31.135 20200809 06:45:39.637 kw output-20200809-064513.xml
Validate the use case for Single UE Validate the work flow PASS Select Technology PASS 1.243 20200809 06:45:39.637 20200809 06:45:55.880 kw output-20200809-064513.xml
Validate the use case for Single UE Validate the work flow PASS Select Menu PASS 7.147 20200809 06:45:55.880 20200809 06:46:03.027 kw output-20200809-064513.xml
Validate the use case for Single UE Validate the work flow PASS BuiltIn.Log FAIL 0.001 20200809 06:46:03.027 20200809 06:46:03.028 kw output-20200809-064513.xml
Validate the use case for Single UE Validate the work flow PASS BuiltIn.Sleep PASS 5.0 20200809 06:46:03.028 20200809 06:46:08.028 kw output-20200809-064513.xml
Umarım bu pasaj cevap bulmanıza yardımcı olur.
Yanıtlar
Ne yazık ki bunu Plotly'de yapmanın iyi bir yolu yok. Plotly, etkileşimli grafikler oluşturmak için harikadır, ancak ayarlanabilirlik pahasına.
Aklıma gelen tek "geçici çözüm" (ve bu harika değil), çizim arka planını tarayıcının arka planıyla aynı renk yapmak, ızgara rengini tarayıcınızın arka planından farklı bir şeye değiştirmek ve ardından dolgu eklemek. (Örneğimde, tarayıcının arka planının beyaz olduğunu varsayıyorum). Bununla birlikte, bu hem x hem de y eksenlerini dolduracak ve bunu aşmanın bir yolunu bulamıyorum.
import pandas as pd
import plotly.graph_objects as go
df = pd.DataFrame({'ColumnA':[1,2,3,4,5], 'ColumnB':[5,6,7,8,9], 'ColumnC':[6,7,8,9,10]})
trace1 = go.Box(x=df['ColumnA'],orientation='h')
trace2 = go.Box(x=df['ColumnB'],orientation='h')
trace3 = go.Box(x=df['ColumnB'],orientation='h')
fig = go.Figure(data=[trace1, trace2, trace3])
fig.update_layout(
boxmode='group',
boxgap=0.25,
boxgroupgap=0.25,
height=500,
paper_bgcolor='rgba(0,0,0,0)',
plot_bgcolor='rgba(0,0,0,0)',
xaxis=dict(gridcolor='lightgrey'),
margin=dict(l=600, r=150, b=10, pad=100)
)
fig.show()

Ayarlamak için çentik işaretleri varsa ve verilerinize bağlı olarak, çentiklere boşluk ekleyebilirsiniz. Boşluklar, aşağıdaki gibi bir liste anlayışı kullanılarak eklenebilir:
spaces = ' '* 25
labels = ['giraffes', 'orangutans', 'monkeys']
newLabels = [label+spaces for label in labels]
İşte onay işaretleri ve boşlukların kullanıldığı bir örnek:
import plotly.graph_objects as go
spaces = ' '* 25
labels = ['giraffes', 'orangutans', 'monkeys']
newLabels = [label+spaces for label in labels]
fig = go.Figure(go.Bar(
x=[20, 14, 23],
y=newLabels,
orientation='h'))
fig.show()

En iyi yolun fig.update_yaxes(ticksuffix = " ")
hile yapmak olduğuna inanıyorum :
import plotly.graph_objects as go
labels = ['giraffes', 'orangutans', 'monkeys']
fig = go.Figure(go.Bar(x=[20, 14, 23], y=labels, orientation='h'))
# Adjust for your purposes the width of the blank space in " "
fig.update_yaxes(ticksuffix = " ")
fig.show()