Python/matplotlib:用变化的背景颜色创建图表

flseospp  于 2023-01-17  发布在  Python
关注(0)|答案(3)|浏览(152)

我想创建一个根据某个变量改变背景颜色的图表,例如:

我的变量将确定特定X值的背景是灰色、红色还是绿色,我知道set_facecolor(color),但这只会改变整个背景。

wlzqhblo

wlzqhblo1#

你可以使用fill_between()来填充x轴之间的区域。下面是一个demo来说明你如何使用x轴来填充

qkf9rpyu

qkf9rpyu2#

你可以使用matplotlib的colorbar函数来创建彩色图形,类似于:

plt.colorbar();
frebpwbc

frebpwbc3#

我知道这是一个老问题,但我会张贴的解决方案,我结束了,如果其他人来这里寻找这个像我一样。
此函数可用于使用状态列表对图进行垂直着色。

def plot_state_as_color(x_data, state_data, axis, add_labels=True):
    state_current = state_data[0]
    span_left = x_data[0]
    state_encountered = []
    for span_right, state_next in zip(x_data, state_data):
        if state_current != state_next:
            label = None
            if state_current not in state_encountered:
                state_encountered.append(state_current)
                if add_labels:
                    label = state_current

            # plot section
            color = "C{}".format(state_encountered.index(state_current))
            axis.axvspan(span_left, span_right, facecolor=color, alpha=0.5, label=label)

            # Update current state parameters
            span_left = span_right
            state_current = state_next

下面是如何使用它的示例。

# Generate some data for the example
x_values = np.linspace(0, 10, 1000)
y_values = np.abs(np.sin(x_values))
state = [round(3*v) for v in y_values]

# figure with 4 states
plt.figure()
ax = plt.gca()
plt.plot(x_values, state, label="state")
plot_state_as_color(x_data=x_values, state_data=state, axis=ax)
plt.title("4 states")
plt.legend()

此代码生成下图
plot of 4 states as color
状态向量还可以包含如下字符串

# State with string values
state_display_name = {0: "Zero",
                      1: "One",
                      2: "Two",
                      3: "Three"}
state = [state_display_name[s] for s in state]
plt.figure()
ax = plt.gca()
plot_state_as_color(x_data=x_values, state_data=state, axis=ax)
plt.title("4 states using strings as states")
plt.legend()
plt.show()

example of strings as states
一个限制是,状态颜色图不能像原始问题的图形那样有gab。

相关问题