Matplotlib/Mplfinance技术问询:如何修改子图中线与柱状图的颜色
解决Mplfinance子图单独设置样式的问题
我来帮你搞定这两个样式修改的需求,直接针对你提到的两个子图调整,不会影响整个图表的样式:
1. 修改「Tweets」折线图(标记A)的颜色
在创建df['count_s']对应的make_addplot时,直接添加color参数就能指定折线颜色,你可以用十六进制色值或者命名颜色(比如'darkorange')。修改后的代码片段如下:
mpf.make_addplot( df['count_s'], ax=ax2, ylabel='Tweets', color='#1f77b4' # 这里替换成你想要的颜色 ),
2. 修改「Sentiment」柱状图(标记B)的颜色,且正负值用不同颜色
要实现正负分色的柱状图,我们需要先根据sentiment列的数值生成一个颜色数组,再把这个数组传给make_addplot的color参数。具体操作:
- 遍历
df['sentiment'],为正数、负数、零值分别指定不同颜色 - 将生成的颜色数组传入柱状图的
make_addplot中
修改后的代码片段:
# 先生成情感值的颜色数组 sentiment_colors = [] for val in df['sentiment']: if val > 0: sentiment_colors.append('#2ca02c') # 正数用绿色 elif val < 0: sentiment_colors.append('#ff4136') # 负数用红色 else: sentiment_colors.append('#888888') # 零值用灰色(可自定义) # 创建情感柱状图的addplot mpf.make_addplot( df['sentiment'], type='bar', ax=ax3, ylabel='Sentiment', color=sentiment_colors # 传入颜色数组 ),
完整修改后的代码整合
把上述修改整合到你的原函数中,aps部分的完整代码如下:
# 先生成情感值的颜色数组 sentiment_colors = [] for val in df['sentiment']: if val > 0: sentiment_colors.append('#2ca02c') elif val < 0: sentiment_colors.append('#ff4136') else: sentiment_colors.append('#888888') # Create add plots aps = [ mpf.make_addplot( df['count_s'], ax=ax2, ylabel='Tweets', color='#1f77b4' # 设置Tweets折线颜色 ), mpf.make_addplot( df['sentiment'], type='bar', ax=ax3, ylabel='Sentiment', color=sentiment_colors # 设置情感柱状图的分色 )]
这样修改后,你就能单独控制这两个子图的样式,完全不会影响主K线图和成交量子图的原有样式。
内容的提问来源于stack exchange,提问作者cwfmoore




