【发布时间】:2021-01-09 02:13:43
【问题描述】:
我刚刚开始尝试用 Python 进行可视化。使用以下代码,我正在尝试将排序功能添加到从数据框中绘制的 Matplotlib 条形图。我想在图表上添加一个button,比如sort,这样当它被点击时,它会按照从最高销售数字到最低销售数字的顺序显示一个新的图,目前按钮可以显示但排序无法触发功能。任何想法或指针将不胜感激。
[更新尝试]
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
def sort(data_frame):
sorted = data_frame.sort_values('Sales')
return data_frame2
def original():
return data_frame
data_frame.plot.bar(x="Product", y="Sales", rot=70, title="Sales Report");
plot.xlabel('Product')
plot.ylabel('Sales')
axcut = plt.axes([0.9, 0.0, 0.1, 0.075])
bsort = Button(axcut,'Sort')
bsort.on_clicked(sort)
axcut2 = plt.axes([1.0, 0.0, 0.1, 0.075])
binit = Button(axcut2,'Original')
binit.on_clicked(original)
plt.show()
预期的图形输出
整合
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import seaborn as sns
%matplotlib notebook
class Index(object):
ind = 0
global funcs
def next(self, event):
self.ind += 1
i = self.ind %(len(funcs))
x,y,name = funcs[i]() # unpack tuple data
for r1, r2 in zip(l,y):
r1.set_height(r2)
ax.set_xticklabels(x)
ax.title.set_text(name) # set title of graph
plt.draw()
class Show():
def trigger(self):
number_button = tk.Button(button_frame2, text='Trigger', command= self.sort)
def sort(self,df_frame):
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)
######intial dataframe
df_frame
######sorted dataframe
dfsorted = df_frame.sort_values('Sales')
x, y = df_frame['Product'], df_frame['Sales']
x1, y1 = df_frame['Product'], df_frame['Sales']
x2, y2 = dfsorted['Product'], dfsorted['Sales']
l = plt.bar(x,y)
plt.title('Sorted - Class')
l2 = plt.bar(x2,y1)
l2.remove()
def plot1():
x = x1
y = y1
name = 'ORginal'
return (x,y,name)
def plot2():
x = x2
y = y2
name = 'Sorteds'
return (x,y,name)
funcs = [plot1, plot2]
callback = Index()
button = plt.axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(button, 'Sort', color='green')
bnext.on_clicked(callback.next)
plt.show()
【问题讨论】:
-
plotly/dash更适合这个。这个问题在我看来有点太宽泛了,因为可能有很多不同的方法。 -
好的,编辑问题以缩小焦点。我可以知道我想使用 Matplotlib/Seaborn,哪个会更好地添加排序按钮功能
-
我会创建一个按钮,一个按钮代表默认图形,一个按钮代表排序图形。要导入使用
from matplotlib.widgets import Button并查看此答案:stackoverflow.com/a/47384928/6366770 -
您可以通过包含
seaborn数据集作为示例来使您的问题可重现。flights是一个示例数据集,但您可以使用sns.get_dataset_names()探索其他数据集名称并将其中一个传递给sns.load_dataset(),例如df = sns.load_dataset('flights') -
也。
import matplotlib.pyplot as plot通常用作import matplotlib.pyplot as plt。我会改变你的语法,因为它可能会与pandas方法plot混淆
标签: python python-3.x matplotlib seaborn