Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plotting methods (line, area, ..) don't handle string x values #22334

Closed
jorisvandenbossche opened this issue Aug 14, 2018 · 7 comments

Comments

@jorisvandenbossche
Copy link
Member

commented Aug 14, 2018

From #22307 (review): when specifying the x labels in one of our plotting calls where this consists of strings, nothing is shown on the x labels:

In [6]: df = pd.DataFrame({'sales': [3, 2, 3],
   ...:                    'visits': [20, 42, 28],
   ...:                    'day': ['Monday', 'Tuesday', 'Wednesday']})

In [7]: ax = df.plot.area(x='day')

figure_1-1

The same is true for line plot, for bar plot it does work.

Related to #18687 (but not exactly the same), and potentially #18726. I would have expected that there is already an issue for this, but didn't directly find it.

@jtweeder

This comment has been minimized.

Copy link

commented Oct 2, 2018

I think I have found the place this is happening, or not happening. Bar and barh both work with the labels as above, but lineplot and areaplot (subclass of lineplot), both do not. For bar and barh the xtick labeling happens in _post_plot_logic which has the following (this is not in lineplot _post_plot_logic).

        ...
        if self.use_index:
            str_index = [pprint_thing(key) for key in data.index]
        else:
            str_index = [pprint_thing(key) for key in range(data.shape[0])]
        name = self._get_index_name()

        self._decorate_ticks(ax, name, str_index)

    def _decorate_ticks(self, ax, name, ticklabels):
        ax.set_xticks(self.tick_pos)
        ax.set_xticklabels(ticklabels)
        if name is not None and self.use_index:
            ax.set_xlabel(name)

I have it changed and working locally in the lineplot class when using the df.plot.area and df.plot.line with this toy example as above. Wanted to pass that information to smarter minds for review before proceeding with a PR.

@ImportanceOfBeingErnest

This comment has been minimized.

Copy link

commented Feb 7, 2019

This seems to be partially fixed in 0.24.1 where the code from above gives

image

However, this just brings to light the real problem, namely that the ticks are essentially only at the correct position by coincidence. E.g. if you let the axes autoscale,

df = pd.DataFrame({'sales': [3, 2, 3],
                   'visits': [20, 42, 28],
                   'day': ['Monday', 'Tuesday', 'Wednesday']})

ax = df.plot.area(x='day')
ax.set_xlim(None, None)
ax.autoscale()
plt.show()

the ticks are completely off.

image

In total this is the same issue as plotting with index of objects should use FixedLocator #7612 which is already 5 years old and still unsolved.

@jorisvandenbossche

This comment has been minimized.

Copy link
Member Author

commented Feb 8, 2019

this is the same issue as plotting with index of objects should use FixedLocator #7612

Ah, thanks for the link, that is probably the issue I was looking for.

which is already 5 years old and still unsolved.

Contributions are very welcome!

@user1493

This comment has been minimized.

Copy link

commented Apr 4, 2019

This issue still persists! In my case, I'm seeing some xticks but not all of them for line and area plots. In case of bar and barh, things work correctly.
Untitled

@anordin95

This comment has been minimized.

Copy link
Contributor

commented Apr 5, 2019

I'm going to take a crack at this. If anyone else is trying as well let me know!

@Tarun-abesit

This comment has been minimized.

Copy link

commented Apr 6, 2019

Hey everyone I want to contribute my solution to this issue. Can I??

@ajsharma22

This comment has been minimized.

Copy link

commented Apr 6, 2019

Hey everyone I want to contribute my solution to this issue. Can I??

Sure, post how are you going to solve this issue.

nrebena added a commit to nrebena/pandas that referenced this issue Apr 23, 2019

nrebena added a commit to nrebena/pandas that referenced this issue Apr 24, 2019

TST: Split test for pandas-dev#15912
Separate the test for pandas-dev#7612 and pandas-dev#22334, that are about string index,
and test for pandas-dev#15912, about multiindex.

@jreback jreback modified the milestones: Contributions Welcome, 0.25.0 Apr 28, 2019

jreback added a commit that referenced this issue Apr 30, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
8 participants
You can’t perform that action at this time.