相比第一版程序(https://blog.csdn.net/wokaoyan1981/article/details/108459320)第二版直接从Excel文档读取数据,不必手动录入代码数据。
一、数据(grape output.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, 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')
三、效果图:
四、下一步计划:
运用Tkinter创建图形界面,包括选择数据源文件、设置输出位置、图形大小等等功能。