2016-08-26 2 views
1

Я использовал следующий код в Python для построения четырех векторов. Однако, как вы можете видеть, сюжет не выглядит красивым, поскольку разные кривые прилипают друг к другу в некоторых точках, и они очень близки друг к другу. Как я могу изменить сюжет так, чтобы кривые лучше разделились и сюжет выглядел лучше?Измените длину оси графика, чтобы диаграммы выглядели лучше в Python

plt.gca().set_color_cycle(['red', 'green','blue','purple']) 
plt.plot(UB_user_util_list) 
plt.plot(UB_Greedy_user_util_list) 
plt.plot(IB_user_util_list,) 
plt.plot(IB_Greedy_user_util_list) 
plt.legend(['UB', 'UB_Optimized','IB','IB_opimized'], loc='upper left') 
plt.title("User Utility values over time/split data based on time") 
plt.show() 

enter image description here

+0

У вас только большой участок? 'plt.figsize (12, 16)'? То есть, если они * должны * быть на одном рисунке. – putonspectacles

ответ

0

Как насчет разделив их на четыре сюжетных?

enter image description here

Вы могли бы имитировать Сиборн/ggplot/стиль панд просто используя Matplotlib как:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 
mpl.rcParams['axes.linewidth'] = 0.0 

vex = (np.random.rand(100),)*4 
v_attr = [('r','v1'), ('orange', 'v2'), 
      ('g', 'v3'), ('b', 'v4')] 

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', 
                sharey='row') 

for s,v,(c,l) in zip([ax1, ax2, ax3, ax4], vex, v_attr): 
    s.set_axis_bgcolor('#dddddd') 
    s.grid(b=True, which='major', c='white', ls='-', zorder=-1, 
      lw=0.75, alpha=0.64) 
    s.set_ylim(0,max(v)*1.35) 
    s.tick_params('both', pad=4, labelsize=8, which='major', 
        direction='out', top='off', right='off') 
    s.plot(v, label=l, c=c, zorder=3) 
    s.legend(frameon=False,) 

Или, так что вы можете сделать то же самое, сюжетные сравнения, может быть, вы могли бы использовать alpha для индивидуального выделения каждой линии с остальными в фоновом режиме:

enter image description here

import numpy.random as rand 

def rand_line(): 
    return rand.normal(rand.randint(5,12), 
         rand.ranf()*3, 100) 

lines = [rand_line() for _ in range(4)] 
labels = [('r','v1'), ('purple','v2'), 
      ('g','v3'), ('b','v4')] 

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', 
                sharey='row') 
subplots = [ax1, ax2, ax3, ax4] 
for i,s in enumerate(subplots): 
    for j,(v,l) in enumerate(zip(lines,labels)): 
     a = (.9 if j==i else 0.25) 
     s.plot(v, zorder=3, alpha=a, c=l[0], label=l[1]) 
    s.legend(loc='lower center', ncol=4, fontsize=10) 

fig.tight_layout() 
plt.savefig('line_subplots-highlight.png') 
+0

Я хочу, чтобы они были в одном и том же сюжете для сравнения – HimanAB

Смежные вопросы