#python #pandas #numpy #matplotlib #seaborn
#python #панды #numpy #matplotlib #seaborn
Вопрос:
Пример кода
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
dayOfMonth = np.random.randint(low =1, high =32, size=(50))
dayOfWeek = np.random.randint(low =1, high =6, size=(50))
dayOfWork = np.random.randint(low =1, high =22, size=(50))
minute = np.random.randint(low =1, high =61, size=(50))
data = {'DayOfWeek' : dayOfWeek,
'DayOfWork' : dayOfWork,
'Minute' : minute}
df = pd.DataFrame (data)
sns.set_style("whitegrid");
sns.FacetGrid(df, hue="DayOfWeek", height=10)
.map(plt.scatter, "DayOfWork","Minute")
.add_legend();
plt.xticks(range(0,22,1))
plt.yticks(range(0,61,10))
plt.show();
Возможно ли это ожидание? Я новичок в этой области, поэтому прошу прощения.
Ответ №1:
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
def get_start_end_point(df, x_range, cluster_size):
start_x = 0
start_y = 0
end_x = -1
end_y = -1
x_points = []
y_points = []
x_group = []
y_group = []
groups_sum = []
group_sum = 0
for i in x_range:
temp = df[df['DayOfWork'] == i]
if i%cluster_size == 1:
x_group.append(i)
y_group.append(0)
if len(temp) != 0:
group_sum =temp['Minute'].sum()
x_group.append(i)
y_group.append(temp['Minute'].iloc[-1])
if (i%cluster_size == 0 or i == x_range.stop) and i !=0:
x_group.append(i)
y_group.append(0)
x_points.append(x_group.copy())
y_points.append(y_group.copy())
groups_sum.append(group_sum)
x_group.clear()
y_group.clear()
group_sum = 0
return x_points, y_points, groups_sum
dayOfWeek = np.random.randint(low =1, high =6, size=(50))
dayOfWork = np.random.randint(low =1, high =22, size=(50))
minute = np.random.randint(low =1, high =61, size=(50))
data = {'DayOfWeek' : dayOfWeek,
'DayOfWork' : dayOfWork,
'Minute' : minute}
df = pd.DataFrame(data)
x_points,y_points, groups_sum = get_start_end_point(df.sort_values(["DayOfWork", "Minute"]).reset_index(drop=True),range(0,22),3)
sns.set_style("whitegrid");
fig, ax = plt.subplots(figsize=(10, 10))
ax.set_xticks(range(0,22,1))
ax.set_yticks(range(0,61,10))
for i in range(0, len(x_points)):
ax.plot(x_points[i], y_points[i],'b--',lw = 1)
ax.fill_between(x_points[i], y_points[i], color='#c9eaff')
sns_plot = sns.FacetGrid(df, hue="DayOfWeek", height=10)
sns_plot.map(ax.scatter, "DayOfWork","Minute")
sns_plot.add_legend()
После этого я могу создавать группы и изменять цвет фона.
Но когда я пытаюсь показать график, он отображается в двух подзаголовках. Его метка, ось X и имя оси Y показаны на втором графике.
Также у меня есть сумма группы, как я могу отобразить поверх группы?