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()
# 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()
3条答案
按热度按时间wlzqhblo1#
你可以使用fill_between()来填充x轴之间的区域。下面是一个demo来说明你如何使用x轴来填充
qkf9rpyu2#
你可以使用matplotlib的colorbar函数来创建彩色图形,类似于:
frebpwbc3#
我知道这是一个老问题,但我会张贴的解决方案,我结束了,如果其他人来这里寻找这个像我一样。
此函数可用于使用状态列表对图进行垂直着色。
下面是如何使用它的示例。
此代码生成下图
plot of 4 states as color
状态向量还可以包含如下字符串
example of strings as states
一个限制是,状态颜色图不能像原始问题的图形那样有gab。