Matplotlib Gridspec несколько графиков и различные типы графиков - PullRequest
0 голосов
/ 30 августа 2018

Как это выглядит

Сначала я разработал этот код для работы только с круговыми диаграммами. РАБОЧИЙ КОД НИЖЕ.

#!/usr/bin/python2.7
#coding=utf8
import os
import matplotlib as mpl
#mpl.use('Agg')
#import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import numpy as np



fig=plt.figure(figsize=(12,12))
graph_grid=GridSpec(1,3)


datas=[[(u'hangup', 480L), (u'invalid', 46L), (u'one', 1235L), (u'repeat', 153L), (u'three', 987L), (u'two', 2379L), (u'wait', 810L)],
[(u'hangBut', 2L), (u'gotoButik', 113L), (u'goBackfrom', 29L), (u'fromIM2Hot', 398L), (u'choice3_to', 1L), (u'choice2_to', 1L)],
[(0L, 5L), (1L, 6L), (2L, 9L), (9L, 419L), (10L, 609L), (11L, 685L), (12L, 694L), (13L, 639L), (14L, 611L), (15L, 566L), (16L, 523L), (17L, 484L), (18L, 327L), (19L, 253L), (20L, 155L), (21L, 61L), (22L, 33L), (23L, 11L)]]

counter=0
for ds in datas:

    labels=[ k[0] for k in ds]
    vals=[ k[1] for k  in ds]
    ziplists=zip(vals,labels)
    ziplists=sorted(ziplists,reverse=True)
    vals, labels = zip(*ziplists)
    total=sum(vals)
    plt.subplot(graph_grid[0,counter], aspect=1)
    #print len(labels)
    #print len(vals)
    print()
    plt.title("title")
    if counter <= 1:
       piechart=plt.pie(vals, autopct=lambda(p): '{:.0f}'.format(p * total / 100), shadow=True,pctdistance=1.2)
       plt.legend(piechart[0], labels, loc="lower right",  prop={'size': 6}, bbox_to_anchor=(0.1, 0.04),)
    elif counter == 2:
        ypos=np.arange(len(labels))
        print ypos
        print len(vals)
        plt.bar(ypos,vals,color='red', width=0.3 )

        plt.xticks(ypos,vals)
        plt.xlabel(u'hours')
        plt.ylabel(u'count')
    counter+=1

fig.tight_layout()
fig.set_size_inches(w=11, h=7)

plt.show()

Выглядело хорошо. В основном. Но некоторые данные могут выглядеть лучше в виде диаграммы. Сказано - сделано. К сожалению, диаграмма нарисована слишком узко, и я почти не могу изменить ее размер. Некоторые сумасшедшие значения ширины, такие как witdth = 1000, делают некоторую работу, но все равно график выглядит дрянным. В чем проблема? Как это исправить?

1 Ответ

0 голосов
/ 30 августа 2018

Проблема в том, что вы устанавливаете соотношение сторон гистограммы на 1, так же, как круговые диаграммы. Если вы удалите это, гистограмма станет читабельной.

Возможно, я бы поставил plt.subplot(...) в операторах if, чтобы вы могли контролировать, когда устанавливаете соотношение сторон:

if counter <= 1:
    plt.subplot(graph_grid[0,counter], aspect=1)
    # pie charts here

elif counter == 2:
    plt.subplot(graph_grid[0,counter])
    # bar chart here

, которое дает следующее изображение (возможно, вам придется повернуть отметки оси x на гистограмме, чтобы оно выглядело хорошо):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...