Weird behavior of barplot from python matplotlib with datetime
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot the data out but does not provide sufficient detail on the lower values
plt.figure()
plt.bar(x,y)
# plot the data out but ommit the datetime information
plt.figure()
plt.bar(range(0,len(x)),y)
Hello guys, I am just starting with the matplotlib in transition from matlab to python. However, I encountered weird behavior of matplotlib as it is not able to display the data along with the datetime element.
My question here would be the output of both bar plot yield two different results.
The first one directly convert the data into some kind of continuous data where as the second one more like categorical data. Do anyone encountered similar problem as mine and dont mind share their way of approaching this?
P/s: i tried seaborn and it works but somehow does not play well with dual axis plotting. I also googled for similar issue but somehow not such issue?
python datetime matplotlib bar-chart visualize
add a comment |
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot the data out but does not provide sufficient detail on the lower values
plt.figure()
plt.bar(x,y)
# plot the data out but ommit the datetime information
plt.figure()
plt.bar(range(0,len(x)),y)
Hello guys, I am just starting with the matplotlib in transition from matlab to python. However, I encountered weird behavior of matplotlib as it is not able to display the data along with the datetime element.
My question here would be the output of both bar plot yield two different results.
The first one directly convert the data into some kind of continuous data where as the second one more like categorical data. Do anyone encountered similar problem as mine and dont mind share their way of approaching this?
P/s: i tried seaborn and it works but somehow does not play well with dual axis plotting. I also googled for similar issue but somehow not such issue?
python datetime matplotlib bar-chart visualize
add a comment |
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot the data out but does not provide sufficient detail on the lower values
plt.figure()
plt.bar(x,y)
# plot the data out but ommit the datetime information
plt.figure()
plt.bar(range(0,len(x)),y)
Hello guys, I am just starting with the matplotlib in transition from matlab to python. However, I encountered weird behavior of matplotlib as it is not able to display the data along with the datetime element.
My question here would be the output of both bar plot yield two different results.
The first one directly convert the data into some kind of continuous data where as the second one more like categorical data. Do anyone encountered similar problem as mine and dont mind share their way of approaching this?
P/s: i tried seaborn and it works but somehow does not play well with dual axis plotting. I also googled for similar issue but somehow not such issue?
python datetime matplotlib bar-chart visualize
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot the data out but does not provide sufficient detail on the lower values
plt.figure()
plt.bar(x,y)
# plot the data out but ommit the datetime information
plt.figure()
plt.bar(range(0,len(x)),y)
Hello guys, I am just starting with the matplotlib in transition from matlab to python. However, I encountered weird behavior of matplotlib as it is not able to display the data along with the datetime element.
My question here would be the output of both bar plot yield two different results.
The first one directly convert the data into some kind of continuous data where as the second one more like categorical data. Do anyone encountered similar problem as mine and dont mind share their way of approaching this?
P/s: i tried seaborn and it works but somehow does not play well with dual axis plotting. I also googled for similar issue but somehow not such issue?
python datetime matplotlib bar-chart visualize
python datetime matplotlib bar-chart visualize
edited Nov 21 '18 at 3:38
CozyAzure
5,41841836
5,41841836
asked Nov 21 '18 at 3:31
Billy LauBilly Lau
31
31
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
I'm not sure if I would call the observed behaviour unexpected. In the first case you provide dates to the x variable of the bar plot, hence it will plot the bars at those dates. In the second case you provide some numbers to the x variable, hence it will plot the numbers.
Since you didn't tell which of those you actually prefer, a solution is to make them both equal visually. Still, the respective concept is different.
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot numeric plot
plt.figure()
plt.bar(x,y, width=4./24/60) # 4 minutes wide bars
plt.gca().xaxis.set_major_formatter(DateFormatter("%H:%M"))
# Plot categorical plot
plt.figure()
plt.bar(range(0,len(x)),y, width=0.8) # 0.8 units wide bars
plt.xticks(range(0,len(x)), [d.strftime("%H:%M") for d in x])
plt.show()
The difference between the concepts would however be more clearly observable when using different data,
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0),
datetime.datetime(1943,3, 13,12,45,0),
datetime.datetime(1943,3, 13,12,50,0)]
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats ('HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thewidth
does not play a part in determining the axis units. It's reallyx
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.
– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
add a comment |
I'm not sure about how to fix the problems with matplotlib
and datetime
, but pandas
handles datetime
objects very well. You can consider it. You can do, for example, the following:
import pandas as pd
df = pd.DataFrame({'date': x, 'value': y})
df.set_index('date').plot.bar()
plt.show()
And improvements are pretty easy to do too:
df = pd.DataFrame({'date': x, 'value': y})
df['date'] = df['date'].dt.time
df.set_index('date').plot.bar(rot=0, figsize=(10, 5), alpha=0.7)
plt.show()
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404873%2fweird-behavior-of-barplot-from-python-matplotlib-with-datetime%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm not sure if I would call the observed behaviour unexpected. In the first case you provide dates to the x variable of the bar plot, hence it will plot the bars at those dates. In the second case you provide some numbers to the x variable, hence it will plot the numbers.
Since you didn't tell which of those you actually prefer, a solution is to make them both equal visually. Still, the respective concept is different.
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot numeric plot
plt.figure()
plt.bar(x,y, width=4./24/60) # 4 minutes wide bars
plt.gca().xaxis.set_major_formatter(DateFormatter("%H:%M"))
# Plot categorical plot
plt.figure()
plt.bar(range(0,len(x)),y, width=0.8) # 0.8 units wide bars
plt.xticks(range(0,len(x)), [d.strftime("%H:%M") for d in x])
plt.show()
The difference between the concepts would however be more clearly observable when using different data,
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0),
datetime.datetime(1943,3, 13,12,45,0),
datetime.datetime(1943,3, 13,12,50,0)]
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats ('HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thewidth
does not play a part in determining the axis units. It's reallyx
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.
– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
add a comment |
I'm not sure if I would call the observed behaviour unexpected. In the first case you provide dates to the x variable of the bar plot, hence it will plot the bars at those dates. In the second case you provide some numbers to the x variable, hence it will plot the numbers.
Since you didn't tell which of those you actually prefer, a solution is to make them both equal visually. Still, the respective concept is different.
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot numeric plot
plt.figure()
plt.bar(x,y, width=4./24/60) # 4 minutes wide bars
plt.gca().xaxis.set_major_formatter(DateFormatter("%H:%M"))
# Plot categorical plot
plt.figure()
plt.bar(range(0,len(x)),y, width=0.8) # 0.8 units wide bars
plt.xticks(range(0,len(x)), [d.strftime("%H:%M") for d in x])
plt.show()
The difference between the concepts would however be more clearly observable when using different data,
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0),
datetime.datetime(1943,3, 13,12,45,0),
datetime.datetime(1943,3, 13,12,50,0)]
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats ('HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thewidth
does not play a part in determining the axis units. It's reallyx
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.
– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
add a comment |
I'm not sure if I would call the observed behaviour unexpected. In the first case you provide dates to the x variable of the bar plot, hence it will plot the bars at those dates. In the second case you provide some numbers to the x variable, hence it will plot the numbers.
Since you didn't tell which of those you actually prefer, a solution is to make them both equal visually. Still, the respective concept is different.
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot numeric plot
plt.figure()
plt.bar(x,y, width=4./24/60) # 4 minutes wide bars
plt.gca().xaxis.set_major_formatter(DateFormatter("%H:%M"))
# Plot categorical plot
plt.figure()
plt.bar(range(0,len(x)),y, width=0.8) # 0.8 units wide bars
plt.xticks(range(0,len(x)), [d.strftime("%H:%M") for d in x])
plt.show()
The difference between the concepts would however be more clearly observable when using different data,
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0),
datetime.datetime(1943,3, 13,12,45,0),
datetime.datetime(1943,3, 13,12,50,0)]
I'm not sure if I would call the observed behaviour unexpected. In the first case you provide dates to the x variable of the bar plot, hence it will plot the bars at those dates. In the second case you provide some numbers to the x variable, hence it will plot the numbers.
Since you didn't tell which of those you actually prefer, a solution is to make them both equal visually. Still, the respective concept is different.
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
import datetime
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,10,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,20,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0)]
y = [1,2,3,4,2,1,3,4]
# plot numeric plot
plt.figure()
plt.bar(x,y, width=4./24/60) # 4 minutes wide bars
plt.gca().xaxis.set_major_formatter(DateFormatter("%H:%M"))
# Plot categorical plot
plt.figure()
plt.bar(range(0,len(x)),y, width=0.8) # 0.8 units wide bars
plt.xticks(range(0,len(x)), [d.strftime("%H:%M") for d in x])
plt.show()
The difference between the concepts would however be more clearly observable when using different data,
x = [datetime.datetime(1943,3, 13,12,0,0),
datetime.datetime(1943,3, 13,12,5,0),
datetime.datetime(1943,3, 13,12,15,0),
datetime.datetime(1943,3, 13,12,25,0),
datetime.datetime(1943,3, 13,12,30,0),
datetime.datetime(1943,3, 13,12,35,0),
datetime.datetime(1943,3, 13,12,45,0),
datetime.datetime(1943,3, 13,12,50,0)]
edited Nov 21 '18 at 4:26
answered Nov 21 '18 at 4:21
ImportanceOfBeingErnestImportanceOfBeingErnest
135k13151228
135k13151228
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats ('HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thewidth
does not play a part in determining the axis units. It's reallyx
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.
– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
add a comment |
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats ('HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thewidth
does not play a part in determining the axis units. It's reallyx
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.
– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
A small addition for the OP, the formats accepted by DateFormatter can be found here (docs.python.org/3/library/…).
– Patol75
Nov 21 '18 at 4:34
I think the relation between matlab datetime formats (
'HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
I think the relation between matlab datetime formats (
'HH:MM'
) and python ('%H:%M'
) is pretty obvious in this case, but thanks for then link anyways.– ImportanceOfBeingErnest
Nov 21 '18 at 4:41
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
Thanks. I guess the keyword here would be the "width" of datetime. I did not realize it plays a part in determining whether the bar is continuous or discrete. I guess i do get a little bit confused about the datetime format in python. Thanks again for pointing out!
– Billy Lau
Nov 21 '18 at 4:46
The
width
does not play a part in determining the axis units. It's really x
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
The
width
does not play a part in determining the axis units. It's really x
itself that determines the units. If those are datetimes, the units are different than if they are integers starting at 0.– ImportanceOfBeingErnest
Nov 21 '18 at 5:00
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
i see. Thanks for clarifying!
– Billy Lau
Nov 21 '18 at 5:42
add a comment |
I'm not sure about how to fix the problems with matplotlib
and datetime
, but pandas
handles datetime
objects very well. You can consider it. You can do, for example, the following:
import pandas as pd
df = pd.DataFrame({'date': x, 'value': y})
df.set_index('date').plot.bar()
plt.show()
And improvements are pretty easy to do too:
df = pd.DataFrame({'date': x, 'value': y})
df['date'] = df['date'].dt.time
df.set_index('date').plot.bar(rot=0, figsize=(10, 5), alpha=0.7)
plt.show()
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
add a comment |
I'm not sure about how to fix the problems with matplotlib
and datetime
, but pandas
handles datetime
objects very well. You can consider it. You can do, for example, the following:
import pandas as pd
df = pd.DataFrame({'date': x, 'value': y})
df.set_index('date').plot.bar()
plt.show()
And improvements are pretty easy to do too:
df = pd.DataFrame({'date': x, 'value': y})
df['date'] = df['date'].dt.time
df.set_index('date').plot.bar(rot=0, figsize=(10, 5), alpha=0.7)
plt.show()
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
add a comment |
I'm not sure about how to fix the problems with matplotlib
and datetime
, but pandas
handles datetime
objects very well. You can consider it. You can do, for example, the following:
import pandas as pd
df = pd.DataFrame({'date': x, 'value': y})
df.set_index('date').plot.bar()
plt.show()
And improvements are pretty easy to do too:
df = pd.DataFrame({'date': x, 'value': y})
df['date'] = df['date'].dt.time
df.set_index('date').plot.bar(rot=0, figsize=(10, 5), alpha=0.7)
plt.show()
I'm not sure about how to fix the problems with matplotlib
and datetime
, but pandas
handles datetime
objects very well. You can consider it. You can do, for example, the following:
import pandas as pd
df = pd.DataFrame({'date': x, 'value': y})
df.set_index('date').plot.bar()
plt.show()
And improvements are pretty easy to do too:
df = pd.DataFrame({'date': x, 'value': y})
df['date'] = df['date'].dt.time
df.set_index('date').plot.bar(rot=0, figsize=(10, 5), alpha=0.7)
plt.show()
answered Nov 21 '18 at 3:44
Julian PellerJulian Peller
9041511
9041511
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
add a comment |
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
"but pandas handles datetime objects very well" - Note that pandas in this case does not use datetime objects as real dates. You would see that if using unequal spacings between the dates. They would still be equally spaced on the axis.
– ImportanceOfBeingErnest
Nov 21 '18 at 4:06
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53404873%2fweird-behavior-of-barplot-from-python-matplotlib-with-datetime%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown