【问题标题】:Matplotlib and Pandas change colors of negative valuesMatplotlib 和 Pandas 改变负值的颜色
【发布时间】:2021-06-09 22:24:07
【问题描述】:

我想将条形图的负值颜色设置为“深天蓝色”,并保持正值“深红色”。实现这一目标的最佳方法是什么?我的 csv 文件的 X 值是纬度点,我的 Y 值是温度异常。如我的链接图中所示,我的 x 轴似乎也有问题。它为从 -90 到 90 的每个纬度点绘制刻度,这会导致很多重叠。我希望以 15 为增量,但我不知道该怎么做。

编辑:已解决。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
import numpy as np

filename = "2015_tAnoms.csv"

df = pd.read_csv(filename, delimiter=',',header='infer')

figure(num=None, figsize=(8, 6), dpi=300, facecolor='w', edgecolor='k')

ax = plt.gca()

ax.set_facecolor((0,0,0))
ax.set_ylim([-1,3])

ax.grid(color='lightgray', alpha=0.6, which='major', axis='y', linestyle='-')


plt.bar(df['Latitude'],df['TempAnom'],color=np.where(df['TempAnom'] < 0, 'deepskyblue', 'crimson'))
plt.margins(x=0)
ax.xaxis.set_ticks(np.arange(-90,91,15))

plt.xlabel("Latitude")
plt.ylabel("Temperature Anomaly (°C)")
plt.title("2015 Temperature Anomalies by Latitude Band")

【问题讨论】:

    标签: python pandas csv matplotlib bar-chart


    【解决方案1】:

    您可以根据df['TempAnom'] &lt; 0 条件将颜色作为具有不同颜色的系列传递:

    plt.bar(
        df['Latitude'], df['TempAnom'],
        color=np.where(df['TempAnom'] < 0, 'deepskyblue', 'crimson'),
    )
    
    ax.xaxis.set_ticks(np.arange(-90, 91, 15))
    

    输出:

    【讨论】:

    • 太好了,这行得通。关于如何增加 x 轴的任何想法,因此它不会绘制从 -90 到 90 的每个纬度点? 15 的增量是我想要得到的。
    • 你可以在df.plot.bar中添加xticks参数:df.plot.bar(..., xticks=np.arange(-90, 90, 15))
    • @ChrisTurnbull MultipleLocator.
    • 修复了标签,但现在值从 0 @perl 开始
    • @ChrisTurnbull 是的,它是条形图,所以有点不同...试试 Quang Hoang 建议的 ax.xaxis.set_major_locator(mpl.ticker.MultipleLocator(15))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2011-07-22
    • 2021-11-16
    • 2023-03-17
    • 2013-04-15
    • 1970-01-01
    • 2015-01-11
    相关资源
    最近更新 更多