<p>关于你的第一个问题。基本上,你可以列出你正在使用的日期和正在使用的日期之间的所有日期。因此,请在代码开头添加以下内容:</p>
<pre><code>import pandas as pd
alldays = pd.date_range(start="20200123",
end="20200221",
normalize=True)
dates = []
for i in alldays:
dates.append(f"{i.month:02}-{i.day:02}")
</code></pre>
<p>它的作用是获取两个日期之间的数据范围,并将该范围转换为一个月-日字符串列表</p>
<p>然后修改这部分代码,如下所示:</p>
<pre><code># Collate data's y-axis for each date, i.e. history
history2={}
cdates = list(data.values())
sorted_dates = sorted( set( cdates ) )
for i in dates: # This is the only change!
cases=[]
for case, date in data.items():
if i == date:
cases.append(case)
#print( i, cases)
history2[i] = cases
</code></pre>
<p>这一变化将给你带来:</p>
<p><a href="https://i.stack.imgur.com/GGfCc.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GGfCc.png" alt="Stem Plot 1"/></a></p>
<p>关于第二个问题,请将代码更改为:</p>
<pre><code># annotate stem lines
for ann_x, label in list(history2.items()):
print(ann_x, label)
each_count=1
for each in label:
ax.annotate(f" {each}", xy=(ann_x, each_count), xycoords='data', rotation=30)
each_count += 1
</code></pre>
<p>我刚刚更改了<code>ax.annotate</code>行。这两项改变是:</p>
<ol>
<li>将“”添加到每个批注标签</li>
<li>添加了一个旋转参数。旋转参数不会直接出现在<a href="https://matplotlib.org/3.1.3/api/_as_gen/matplotlib.axes.Axes.annotate.html" rel="nofollow noreferrer">documentation</a>中,但文档说明可以将任何文本方法用作<code>kwargs</code>,它们是<a href="https://matplotlib.org/3.1.3/api/text_api.html#matplotlib.text.Text" rel="nofollow noreferrer">here</a></李>
</ol>
<p>这将有望满足您的要求:</p>
<p><a href="https://i.stack.imgur.com/TT5TH.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/TT5TH.png" alt="Stem Plot 2"/></a></p>