gpt4 book ai didi

python - 如何使用按钮将排序功能添加到 Matplotlib 条形图和线图

转载 作者:行者123 更新时间:2023-12-04 08:17:48 27 4
gpt4 key购买 nike

我刚刚开始尝试用 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()
预期的图形输出
enter image description here
一体化
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()

最佳答案

我使用著名的 titanic 包含了两个可重复的示例。数据集与 class 的基本比较对比 # of survivors用于 matplotlib 的交互式排序barplot (即行)在下面的 x 轴上排序:
bar您必须使用 set_height 遍历矩形的绘图,例如for r1, r2 in zip(l,y): r1.set_height(r2)line情节,你用set_ydata ,例如l.set_ydata(y) .
确保使用 %matplotlib notebook如果使用 jupyter 笔记本。
酒吧

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import seaborn as sns
%matplotlib notebook

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)

df = sns.load_dataset('titanic')
df1 = df.groupby('class', as_index=False)['survived'].sum().sort_values('class')
df2 = df1.sort_values('survived', ascending=False)
x, y = df1['class'], df1['survived']
x1, y1 = df1['class'], df1['survived']
x2, y2 = df2['class'], df2['survived']

l = plt.bar(x,y)
plt.title('Sorted - Class')
l2 = plt.bar(x2,y1)
l2.remove()

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()


def plot1():
x = x1
y = y1
name = 'Sorted - Class'
return (x,y,name)


def plot2():
x = x2
y = y2
name = 'Sorted - Highest # Survivors'
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()
enter image description here
enter image description here
线路
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import seaborn as sns
%matplotlib notebook

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)

df = sns.load_dataset('titanic')
df1 = df.groupby('class', as_index=False)['survived'].sum().sort_values('class')
df2 = df1.sort_values('survived', ascending=False)
x, y = df1['class'].to_numpy(), df1['survived'].to_numpy()
x1, y1 = df1['class'].to_numpy(), df1['survived'].to_numpy()
x2, y2 = df2['class'].to_numpy(), df2['survived'].to_numpy()
l, = plt.plot(x,y)
plt.title('Sorted - Class')

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
l.set_ydata(y) #set y value data
ax.set_xticklabels(x)
ax.title.set_text(name) # set title of graph
plt.draw()


def plot1():
x = x1
y = y1
name = 'Sorted - Class'
return (x,y,name)


def plot2():
x = x2
y = y2
name = 'Sorted - Highest # Survivors'
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()
enter image description here
enter image description here

关于python - 如何使用按钮将排序功能添加到 Matplotlib 条形图和线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65638708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com