- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 matplotlib.dates 绘制一个条形图,其中包含在特定日期发生的实例(以字符串列表的形式呈现),并使用 matplotlib.dates.datestr2num 显示每个日期的两组数据(根据顶部回答 Python matplotlib multiple bars )。
但是,对于该月 12 日以下的日期,该图将以 MM/DD/YY 格式解释日期,而对于该月 12 日以上的日期,该图将以 DD/MM/YY 格式解释日期,导致数据在绘图中跳跃。我认为问题可能在于我如何使用 datestr2num,但不确定如何强制它采用一种或另一种格式。
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, AutoDateLocator, AutoDateFormatter, datestr2num
days = ['30/01/2019', '31/01/2019', '01/02/2019', '02/02/2019', '03/02/2019', '04/02/2019']
adata = [1, 9, 10, 3, 7, 6]
bdata = [1, 2, 11, 3, 6, 2]
x=datestr2num(days)
w=0.25
fig = plt.figure(figsize = (8,4))
ax = fig.add_subplot(111)
ax.bar(x-w, adata, width=2*w, color='g', align='center', tick_label = days)
ax.bar(x+w, bdata, width=2*w, color='r', align='center', tick_label = days)
ax.xaxis_date()
ax.xaxis.set_major_locator(AutoDateLocator(minticks=3, interval_multiples=False))
ax.xaxis.set_major_formatter(DateFormatter("%d/%m/%y"))
plt.show()
在上面的示例中,adata
和 bdata
位于后续日期(1 月 30 日至 2 月 4 日),所有条形都显示为彼此相邻,但绘图显示 1 月 2 日到 4 月 2 日之间的数据,导致数据出现乱序。
任何帮助或澄清都会有帮助,谢谢!
最佳答案
看起来 datestr2num()
来电 dateutil.parser.parse(d, default=default)
。 dateutil.parser.parse
有一个 kwarg dayfirst
但 datestr2num()
没有提供向前传递参数的方法。如果您将日期列表传递给 datestr2num()
,它将 assume month first .
>>> [dateutil.parser.parse(day, dayfirst=True) for day in days]
[
datetime.datetime(2019, 1, 30, 0, 0),
datetime.datetime(2019, 1, 31, 0, 0),
datetime.datetime(2019, 2, 1, 0, 0),
datetime.datetime(2019, 2, 2, 0, 0),
datetime.datetime(2019, 2, 3, 0, 0),
datetime.datetime(2019, 2, 4, 0, 0)
]
>>> datestr2num(days)
[737089. 737090. 737061. 737092. 737120. 737151.]
>>> datestr2num(days, dayfirst=True)
Traceback (most recent call last):
File "C:\Users\bcohan\Downloads\so.py", line 22, in <module>
print(datestr2num(days, dayfirst=True))
TypeError: datestr2num() got an unexpected keyword argument 'dayfirst'
我建议首先使用datetime
处理日期,然后运行其余的。 (除非重写原始 days
列表中的字符串是合理的。)
x = datestr2num([
datetime.strptime(day, '%d/%m/%Y').strftime('%m/%d/%Y')
for day in days
])
这是一个完整的工作脚本。
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.dates import (
DateFormatter, AutoDateLocator, AutoDateFormatter, datestr2num
)
days = [
'30/01/2019', '31/01/2019', '01/02/2019',
'02/02/2019', '03/02/2019', '04/02/2019'
]
adata = [1, 9, 10, 3, 7, 6]
bdata = [1, 2, 11, 3, 6, 2]
x = datestr2num([
datetime.strptime(day, '%d/%m/%Y').strftime('%m/%d/%Y')
for day in days
])
w = 0.25
fig = plt.figure(figsize=(8, 4))
ax = fig.add_subplot(111)
ax.bar(x - w, adata, width=2 * w, color='g', align='center', tick_label=days)
ax.bar(x + w, bdata, width=2 * w, color='r', align='center', tick_label=days)
ax.xaxis_date()
ax.xaxis.set_major_locator(
AutoDateLocator(minticks=3, interval_multiples=False))
ax.xaxis.set_major_formatter(DateFormatter("%d/%m/%y"))
plt.show()
关于python - matplotlib.dates(和 datestr2num)的绘图刻度中的日期格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738557/
我知道这是基本的,但我不确定,我哪里出错了,之前从未写过正则表达式.. 我需要从命令中获取一些输出 cmd | grep '[0-9]+:[0-9]+:[0-9]+:[0-9]+' 我需要grep一些
这个问题在这里已经有了答案: How does assignment work with list slices? [duplicate] (5 个答案) What does colon at as
我在一本 C 书中读到,对于数组 num[7],术语 num 等同于 &num[0]。这个概念对我来说很好,但是当我编写如下所示的程序时,我再次感到困惑。 #include #include int
例如,一种不好的方法是通过字符串分解: toReadableNum :: (Num a, Num b, Read b) => a -> b toReadableNum = read . show 如果
在输入文本字段中,我必须获取该值并在我的 .ts 文件中使用它。你能建议我应该使用以下哪种语法吗? 最佳答案 如果您希望在文本字段中看到的内容与变量中看到的内容之间进行同步对齐,请使用 如果您想在文
我正在研究 while 循环。我目前正在研究一个问题,要求从名为 a、b 和 c 的用户那里获取三个数字。我尝试显示 a 和 b 之间的所有数字,它们除以 c。我尝试使用“if”的想法,但没有成功。
因为这些符号,我很难用谷歌搜索。 num & 8, num >> 8 和 num >> 8 & 64 在 javascript 中是什么意思? 最佳答案 它们是 bitwise operators 关
显然,我的类型签名已关闭。从那以后我发现了原因。现在,我有兴趣了解更多关于我的错字上的 GHCI 推断签名。我试图让这段代码工作: elemNum :: (Eq a, Num b) => a -> [
我有一个程序根据定义的规则接受特定的字符串,即数字运算符编号。例如:2+4-5*9/8 上面的字符串是可以接受的。现在,当我输入类似 2+4-a 的内容时,它再次显示可接受,这是完全 Not Acce
我读到了这样一个旋转数组的解决方案 问题: public class Solution { public void rotate(int[] nums, int k) { in
一般来说,对于 int num , num++ (或 ++num ),作为读-修改-写操作,是 不是原子的 .但是我经常看到编译器,比如GCC ,为其生成以下代码( try here ): void
这个问题在这里已经有了答案: What's the difference between my ($variableName) and my $variableName in Perl? (4 个回答
如果列表中的 num 大于 0.5,我想得到 1,否则得到 0。 例如,a是一个列表 Matlab: b = (a > 0.5) Python: b = [1 if x > 0.5 else 0 fo
第4行为什么要在“-”后面加上“=”? num = 5 if num > 2: print(num) num -= 1 print(num) 最佳答案 num - 1:产生num减一的
iex> num = [9] '\t' 分配单个 [9] 列表返回 '\t'。这是什么原因? 最佳答案 您可以使用 i helper in IEx有关数据类型的更多信息: iex> i [9] Te
好吧,我做错了什么 - Moose 忽略了我的强制: package moo; use Moose; use Moose::Util::TypeConstraints; subtype Bar =>
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 4 年前。 我正在练习编写一些代码。在练
我有声明 SELECT COUNT(*) as num_requests, ip_address FROM requests GROUP BY ip_address ORDER BY num_requ
有什么方法可以在 javascript 中编写更短的 (num>0)?num:0 吗? 原因是 num 变量还没有定义,在上面的例子中需要计算两次。 换句话说,a和b是已知的。我想写 (a>b)?(a
这个问题在这里已经有了答案: Why does 2 == [2] in JavaScript? (9 个回答) 关闭 9 年前。 这些陈述的计算结果为真是否有原因? 0 == [0]; 1 == [
我是一名优秀的程序员,十分优秀!