प्लॉटली: अक्ष लेबल और प्लॉट क्षेत्र के बीच के स्थान को कैसे समायोजित करें?
मैं प्लॉटली में अक्ष लेबल और प्लॉट क्षेत्र के बीच स्थान कैसे समायोजित कर सकता हूं? विशेष रूप से मैं अक्ष लेबल और प्लॉट क्षेत्र के बीच जगह कम करने में दिलचस्प हूं। मैंने एक उदाहरण के साथ एक स्क्रीनशॉट संलग्न किया है।
यहाँ प्रतिलिपि प्रस्तुत करने योग्य कोड स्निपेट है:
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)
और यहाँ डेटाफ्रेम (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
आशा है कि यह स्निपेट उत्तर खोजने में मदद करेगा।
जवाब
दुर्भाग्य से प्लॉटली में ऐसा करने का कोई अच्छा तरीका नहीं है । प्लॉटली इंटरैक्टिव प्लॉट बनाने के लिए महान है, लेकिन ट्यूनेबिलिटी की कीमत पर।
एकमात्र "वर्कअराउंड" जिसके बारे में मैं सोच सकता हूं (और यह बहुत अच्छा नहीं है) यह है कि प्लॉट बैकग्राउंड को ब्राउजर बैकग्राउंड की तरह ही कलर करना है, अपने ब्राउजर बैकग्राउंड से ग्रिडलोर को कुछ अलग से बदलना है, फिर पैडिंग जोड़ें। (मेरे उदाहरण में, मुझे लगता है कि ब्राउज़र पृष्ठभूमि सफेद है)। हालाँकि, यह दोनों x- और y- कुल्हाड़ियों को पैड करेगा, और मुझे इसके आसपास कोई रास्ता नहीं मिल रहा है।
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()
यदि टिक के निशान समायोजित करने के लिए उपलब्ध हैं और आपके डेटा के आधार पर, आप टिक के निशान के लिए स्थान जोड़ सकते हैं। रिक्त स्थान को सूची बोध का उपयोग करके जोड़ा जा सकता है, जैसे:
spaces = ' '* 25
labels = ['giraffes', 'orangutans', 'monkeys']
newLabels = [label+spaces for label in labels]
यहां टिकमार्क और स्पेस का उपयोग कर एक उदाहरण दिया गया है:
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()
मेरा मानना है कि fig.update_yaxes(ticksuffix = " ")
चाल करने का सबसे अच्छा तरीका है :
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()