风船野 发表于 2021-8-11 22:34:17

matplotlib画双纵轴图标显示问题

本帖最后由 风船野 于 2021-8-11 22:36 编辑

求各位大佬有什么修改意见或其他方法,画双纵轴图时显示出四个图标。
在画双纵轴坐标时,出现:A proxy artist may be used instead.报错,
在网上查找后都是下图解决方案:

按提示添加逗号修改方案后又得到:too many values to unpack (expected 1)报错。

代码如下: bar_width = 0.4
    x_1 = list(range(len(x1)))
    x_2 =

    y_1 = df_weekend["营业收入"].values
    y_2 = df_week["营业收入"].values
    y_3 = df_weekend["订单笔数"].values
    y_4 = df_week["订单笔数"].values

    fig = plt.figure(figsize=(23, 9), dpi=100)
    ax1 = fig.add_subplot(111)
    ax2 = ax1.twinx()
    l1, = ax1.bar(x_2, y_2, width=bar_width, label="工作日")   #修改添加逗号部分
    l2, = ax1.bar(x_1, y_1, width=bar_width, label="周末")

    ax1.set_xlabel("时间", fontproperties=my_font)
    ax1.set_ylabel("收入/元", fontproperties=my_font)
    ax1.set_xticks(x_1)
    ax1.set_xticklabels(x1)
    ax1.set_yticks(range(0, 10000, 500))
    plt.title("周末与工作日收入比关系图", fontproperties=my_font, fontsize=20)

    l3, = ax2.plot(x_1, y_3, label="周末", color="red")
    l4, = ax2.plot(x_1, y_4, label="工作日", color="cyan")
    ax2.set_ylabel("笔", fontproperties=my_font)
    ax2.set_yticks(range(0, 70, 5))
    plt.legend(, ["工作日", "周末", "工作日", "周末"], loc=2, prop=my_font)    # 图标显示部分

    for tl in ax1.get_xticklabels():
      tl.set_rotation(45)
      tl.set_fontsize(15)

    plt.savefig("./周末与工作日收入比关系图.png")
    plt.show()
我又尝试了下面显示多图标方法:
    lns = l1 + l2 + l3 + l4
    labs =
    ax1.legend(lns, labs, prop=my_font, loc=4)
结果报错:

各位大佬有什么修改意见或其他方法,目标显示出四个图标。

阿奇_o 发表于 2021-8-11 23:35:32

本帖最后由 阿奇_o 于 2021-8-11 23:38 编辑

你的数据是怎样的咯,你都没给出来,报错说的就是你的数据结构的问题(长度不一致,"解包不了",即too many values to unpack)

不对,你的语法有问题,那 l1 后 干嘛加个逗号 ??

风船野 发表于 2021-8-12 11:57:31

阿奇_o 发表于 2021-8-11 23:35
你的数据是怎样的咯,你都没给出来,报错说的就是你的数据结构的问题(长度不一致,"解包不了",即too many ...

为什么加","请看第一个报错解决方案。这只是个图例显示的问题,跟数据没有关系。

阿奇_o 发表于 2021-8-12 12:45:10

风船野 发表于 2021-8-12 11:57
为什么加","请看第一个报错解决方案。这只是个图例显示的问题,跟数据没有关系。

那我问你 ax1.bar() 返回什么?——人家写的是 plt.plot() ,   不是 ax1.bar()

风船野 发表于 2021-8-12 19:39:24

阿奇_o 发表于 2021-8-12 12:45
那我问你 ax1.bar() 返回什么?——人家写的是 plt.plot() ,   不是 ax1.bar()

plot方法是画折线图,bar是条形图。ax1只是plt的一个对象而已,因为要画双纵轴,所以用ax1,和plt是一样的,这也没有问题。

阿奇_o 发表于 2021-8-12 19:52:25

风船野 发表于 2021-8-12 19:39
plot方法是画折线图,bar是条形图。ax1只是plt的一个对象而已,因为要画双纵轴,所以用ax1,和plt是一样 ...

嗯,好,没问题,让你瞎搞吧。
页: [1]
查看完整版本: matplotlib画双纵轴图标显示问题