Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 边缘之间的Matplotlib填充_Python_Matplotlib - Fatal编程技术网

Python 边缘之间的Matplotlib填充

Python 边缘之间的Matplotlib填充,python,matplotlib,Python,Matplotlib,我需要创建一个尽可能靠近此图片的绘图(给定以下生成的数据帧代码): 这是我的代码的输出图: 我遇到的问题是: 中间填充物的边缘不像图中那样锐利。我有一种白色的影子。如何更改填充之间的线以匹配目标图片 如何将图例颜色线对齐到中心,而不是像代码那样对齐到左边框 这是我的密码: import matplotlib.pyplot as plt import matplotlib.colors as colors import matplotlib.cm as cm import numpy as n

我需要创建一个尽可能靠近此图片的绘图(给定以下生成的数据帧代码):

这是我的代码的输出图:

我遇到的问题是:

  • 中间填充物的边缘不像图中那样锐利。我有一种白色的影子。如何更改填充之间的线以匹配目标图片
  • 如何将图例颜色线对齐到中心,而不是像代码那样对齐到左边框
  • 这是我的密码:

    import matplotlib.pyplot as plt
    import matplotlib.colors as colors
    import matplotlib.cm as cm
    import numpy as np
    import pandas as pd
    
    ncols = 10
    figsize = (20, 5)
    fontsize = 14
    
    dti = pd.date_range('2013-01-01', '2020-12-31', freq='2W')
    probabilities_in_time = np.random.random((ncols, len(dti)))
    probabilities_in_time = probabilities_in_time / \
        probabilities_in_time.sum(axis=0)
    probabilities_in_time = pd.DataFrame(probabilities_in_time).T
    probabilities_in_time.index = dti
    
    cm_subsection = np.linspace(0, 1, ncols)
    colors = [cm.coolwarm(x) for x in cm_subsection]
    
    
    def plot_time_probabilities(probabilities_in_time, figsize):
        plt.figure(figsize=figsize)
        plt.yticks(np.arange(0, 1.2, 0.2), fontsize=fontsize)
        plt.xticks(fontsize=fontsize)
    
        draw_stack_plot(colors, probabilities_in_time)
        set_grid()
        set_legend()
    
        plt.show()
    
    
    def draw_stack_plot(colors, probabilities_in_time):
        for i, color in enumerate(colors):
            if i == 0:
                plt.plot(probabilities_in_time[i], color=color)
                plt.fill_between(probabilities_in_time.index,
                                 probabilities_in_time[0], color=color)
    
            else:
                probabilities_in_time[i] += probabilities_in_time[i-1]
                plt.fill_between(probabilities_in_time.index,
                                 probabilities_in_time[i], probabilities_in_time[i-1],
                                 color=color)
    
            plt.plot(probabilities_in_time[i], label=' Probability: {}'.format(
                i), color=color)
    
    
    def set_grid():
        ax = plt.gca()
        ax.set_axisbelow(False)
        ax.xaxis.grid(True, linestyle='-', lw=1)
    
    
    def set_legend():
        leg = plt.legend(loc='lower left', fontsize=14, handlelength=1.3)
        for i in leg.legendHandles:
            i.set_linewidth(12)
    
    
    plot_time_probabilities(probabilities_in_time, figsize)
    

    要在中间设置图例,可以设置,也可以将图例放置在外部。为避免图例控制柄变大,可以省去
    。设置线宽(12)
    (这将非常宽的边宽度设置为12点)

    将颜色移动一个位置有助于更明显地显示填充边界。要保留正确的图例,应将标签添加到
    fill\u-between

    下面的代码还试图简化部分调用:

    导入matplotlib.pyplot作为plt
    将matplotlib.cm导入为cm
    将numpy作为np导入
    作为pd进口熊猫
    ncols=10
    figsize=(20,5)
    字体大小=14
    dti=pd.日期范围('2013-01-01','2020-12-31',频率为'2W')
    时间内的概率=np.random.random((ncols,len(dti)))
    时间内的概率=时间内的概率/时间内的概率。总和(轴=0)
    时间内的概率=pd.DataFrame(时间内的概率).T
    概率时间指数=dti
    cm_subsection=np.linspace(0,1,ncols)
    颜色=厘米冷温(厘米)
    def绘图时间概率(时间概率,figsize):
    plt.图(figsize=figsize)
    plt.yticks(np.arange(0,1.2,0.2),fontsize=fontsize)
    plt.xticks(fontsize=fontsize)
    绘制堆栈图(颜色、概率、时间)
    设置网格()
    set_图例()
    #利润率(x=0,y=0)
    利润率(x=0.02)
    plt.紧_布局()
    plt.show()
    def绘制堆栈图(颜色、概率):
    当前概率=0
    对于i,枚举中的颜色(颜色):
    plt.fill_between(时间索引中的概率),
    时间内概率[i]+当前概率,当前概率,
    颜色=颜色,标签=f'概率:{i}')
    当前概率+=时间内概率[i]
    plt.绘图(当前概率,
    颜色=颜色[0]如果i=8种其他颜色[i-1]如果i<5种其他颜色[i+1])
    def set_grid():
    ax=plt.gca()
    ax.set_axis低于(False)
    ax.xaxis.grid(True,线型='-',lw=1)
    def set_图例():
    支腿=plt.图例(loc='左下方',fontsize=14,扶手长度=1.3)
    #腿=plt.图例(loc='左上角',bbox_至_锚=(1.01,1),fontsize=14,手长=1.3)
    #对于leg.legendHandles中的i:
    #i.set_线宽(12)
    绘制时间概率图(时间概率图,figsize)
    

    嘿,很抱歉反应太晚了。图形图片输出与预期不完全相同,但还是要感谢您!