【问题标题】:Plotly:如何摆脱多余的 xaxis 刻度?
【发布时间】:2020-12-30 18:25:23
【问题描述】:

这是一个利用 Plotly 库从 .xlsx 文件中读取数据并绘制气泡图的程序。 这是 .xlsx 文件的原始数据:

             1991  1992  1993  1994  1995  1996  1997  1998  1999
         US    10    14    16    18    20    42    64   100    50
      JAPAN   100    30    70    85    30    42    64    98    24
         CN    50    22    30    65    70    66    60    45    45
      INDIA    90    88    35    50    90    60    40    66    76
         UK    40    50    70    50    25    30    22    40    60

这里是代码:

# Version 2
import plotly as py
import plotly.graph_objs as go
import openpyxl
import pandas as pd


wb = openpyxl.load_workbook('grape output.xlsx')
sheet = wb['Sheet1']
row_max = sheet.max_row
col_max = sheet.max_column
first_row_list = []
first_col_list = []
for col_n in range(2, col_max+1):
    first_row_list.append(sheet.cell(row=1, column=col_n).value)
for row_n in range(2,row_max+1):
    first_col_list.append(sheet.cell(row=row_n, column=1).value)

data_all = pd.read_excel('grape output.xlsx')
data_selected = data_all.loc[:,first_row_list]

df = pd.DataFrame(data_selected)
df.index = first_col_list
colors = ['rgb(150,204,90)','rgb(255, 130, 71)','rgb(255, 193, 37)','rgb(180,240,190)','rgb(255, 10, 1)',
          'rgb(25, 19, 3)','rgb(100, 100, 100)','rgb(45,24,200)','rgb(33, 58, 108)','rgb(35, 208, 232)']

data = [go.Scatter(
    x=df.columns,
    y=[country]*len(df.columns),
    mode='markers+text',
    marker=dict(
        color=colors[num],
        size= df.loc[country],
        showscale = False,
        ),
    text=list(map(str, df.loc[country])),
    textposition='middle center',
    )
    for num, country in enumerate(reversed(df.index))
]

layout = go.Layout(plot_bgcolor='rgb(10, 10, 10)',
                   paper_bgcolor='rgb(20, 55, 100)',
                   font={
                       'size': 15,
                       'family': 'sans-serif',
                       'color': 'rgb(255, 255, 255)'
                   },
                   width=1000,
                   height=800,
                   xaxis=dict(
                       title='Output of grapes per year in different countries',
                       nticks = col_max+1,
                   ),
                   showlegend=False,
                   margin=dict(l=100, r=100, t=100, b=100),
                   hovermode = False,
                   )

fig = go.Figure(data=data, layout=layout)
py.offline.plot(fig, filename='basic-scatter.html')

气泡图绘制如下: 除了 1990 年和 2000 年的两个冗余刻度以及两条白色垂直线之外,一切都很好。 我怎样才能做出一些改变来摆脱它们?谢谢!

【问题讨论】:

    标签: python pandas plotly


    【解决方案1】:

    如果您在xaxis 布局中设置type='category',则两个多余的刻度和相应的网格线将不再显示在绘图中:

    import plotly as py
    import plotly.graph_objs as go
    import openpyxl
    import pandas as pd
    
    wb = openpyxl.load_workbook('grape output.xlsx')
    
    sheet = wb['Sheet1']
    row_max = sheet.max_row
    col_max = sheet.max_column
    first_row_list = []
    first_col_list = []
    for col_n in range(2, col_max+1):
        first_row_list.append(sheet.cell(row=1, column=col_n).value)
    for row_n in range(2,row_max+1):
        first_col_list.append(sheet.cell(row=row_n, column=1).value)
    
    data_all = pd.read_excel('grape output.xlsx')
    data_selected = data_all.loc[:,first_row_list]
    
    df = pd.DataFrame(data_selected)
    df.index = first_col_list
    colors = ['rgb(150,204,90)','rgb(255, 130, 71)','rgb(255, 193, 37)','rgb(180,240,190)','rgb(255, 10, 1)',
              'rgb(25, 19, 3)','rgb(100, 100, 100)','rgb(45,24,200)','rgb(33, 58, 108)','rgb(35, 208, 232)']
    
    data = [go.Scatter(
        x=df.columns,
        y=[country]*len(df.columns),
        mode='markers+text',
        marker=dict(
            color=colors[num],
            size= df.loc[country],
            showscale = False,
            ),
        text=list(map(str, df.loc[country])),
        textposition='middle center',
        )
        for num, country in enumerate(reversed(df.index))
    ]
    
    layout = go.Layout(plot_bgcolor='rgb(10, 10, 10)',
                       paper_bgcolor='rgb(20, 55, 100)',
                       font={
                           'size': 15,
                           'family': 'sans-serif',
                           'color': 'rgb(255, 255, 255)'
                       },
                       width=1000,
                       height=800,
                       xaxis=dict(
                           title='Output of grapes per year in different countries',
                           nticks = col_max+1,
                           type='category'
                       ),
                       showlegend=False,
                       margin=dict(l=100, r=100, t=100, b=100),
                       hovermode = False,
                       )
    
    fig = go.Figure(data=data, layout=layout)
    py.offline.plot(fig, filename='basic-scatter.html')
    

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2012-04-15
      • 2011-08-21
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多