Как я могу напечатать различные точечные диаграммы в цикле For в пандах? - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь построить трехмерные диаграммы рассеяния в разных строках, используя python.

Массив "seasons" содержит четыре разных набора данных, и я пытаюсь вызвать каждый набор данных и построить трехмерный график рассеяния отдельно.

Этот код ниже дает мне только результат одного сезона наборов данных [df].

seasons = [summer_spike_df,Autumn_spike_df,Winter_spike_df,Spring_spike_df]
colors = ['b', 'orange', 'g', 'r', 'c', 'm', 'y', 'k', 'Brown', 'ForestGreen'] 
ncenters = 3

for df in (seasons):
    alldata = np.vstack((df['time_of_day'], df['Height'],df['resolution']))
    cntr, u, u0, d, jm, p, fpc = fuzz.cluster.cmeans(
        alldata, ncenters, 3, error=0.005, maxiter=1000, init=None)
    fpcs = []
    fpcs.append(fpc)
    for pt in cntr:
        ax.scatter(pt[0], pt[1],pt[2],color='r')

    cluster_membership = np.argmax(u, axis=0)
    for j in range(ncenters):
        ax.scatter(df['time_of_day'][cluster_membership == j],
                df['Height'][cluster_membership == j],
                df['resolution'][cluster_membership == j],
                '.', 
                color=colors[j], edgecolor='k',marker='o', s=20, lw=0, alpha=0.7)

ax.set_title('Centers = {0}; FPC = {1:.2f}'.format(ncenters, fpc))
ax.axis('on')
#ax.set_ylim([0,6])
ax.grid()
plt.show()

enter image description here

Если я поставлю plt.show() и plt.close() вне цикла for, тогда он покажет все разброс на одном графике.

1 Ответ

0 голосов
/ 06 июня 2019

Вы не показываете, где вы определяете ax.Однако, чтобы получить ваши наборы данных в отдельные трехмерные диаграммы рассеяния, вам необходимо определить их в отдельных осях.

Например, вы можете определить 4 отдельных оси на одном рисунке и явно отобразить каждый фрейм данных в отдельных осях:

fig, axes = plt.subplots(nrows=2, ncols=2)
for df, ax in zip(seasons, axes.flatten()):
    # Your for loop will probably work as is here
    ...

    # With this exception, you'll just move code below within for loop
    ax.set_title('Centers = {0}; FPC = {1:.2f}'.format(ncenters, fpc))
    ax.axis('on')
    ax.grid()
...