-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
[charts] Pie chart overflow with legend #13648
Comments
You can use the Here is an example, where you can modify At Does that solves your issue? |
Hello, how are you? import React from 'react'
import { ChartProps } from './types'
import { PieChart } from '@mui/x-charts/PieChart';
import { Box } from '@material-ui/core';
export const Chart : React.FC<ChartProps> = (props) => {
const [ isHidden, setIsHidden ] = React.useState<boolean>(false);
const { items } = props;
const chartItems = (items.length === 1 && items[0].value === 0) ? [{id: items[0].id, label: items[0].label, value: 0.001}] : items;
const size = {height: 450}
const handleResize = () => {
if(window && window.innerWidth < 950) setIsHidden(true);
else setIsHidden(false);
}
React.useEffect(()=>{
window.addEventListener('resize', handleResize);
handleResize();
return () => {
window.removeEventListener('resize',handleResize)
}
},[])
return (
<Box sx={{ width: '100%', height: '100%' }}>
<PieChart
series={[
{
data: chartItems,
innerRadius: '50%',
highlightScope: { faded: 'global', highlighted: 'item' },
},
]}
slotProps={{
legend: {
hidden: isHidden,
direction: 'row',
position: { vertical: 'bottom', horizontal: 'middle' },
padding: 0,
labelStyle:{
fontSize: 14
},
itemMarkWidth: 11,
itemMarkHeight: 10,
},
}}
margin={{ top: 100, bottom: 100, left: 100, right: 100 }}
{...size}
/>
</Box>
);
} In this case it helped, but I missed being able to manipulate the pieChart responsively, having control over its size and being able to edit the captions better. At first the idea was to have a personalized caption with a table, but as it was a bit obscure to manipulate the component, I opted to leave the caption below and create a separate explanatory table. |
The legend is currently in the SVG, so drawing a table might be complex. |
Great, but how can I insert a new html into the chart? and even more, how can I get item by item, because I imagine that to draw an html table I would need to get the color of the item, the label and the value and iterate over the table. |
You don't need to put it in. You can put it out function ChartsWithLegend() {
<div>
<PieChart />
<MyLegend />
</div>
}
You are providing the items to chat The only thing we defaultize is the color. Either you force them in the charts with or you can use the default one |
Using margin "solves" the issue, but it is really only useful for static charts. Many of us have dynamic data, so the label height/width is unknown making overlaps very common. I've had to do clunky margin calculations based on legend character widths, but I have to overshoot it, so there often ends up being a lot of awkward white space. I have investigated the source code too much, but the legend and the chart appear to be a single SVG. Without knowing much about the a11y impacts there, couldn't we split it into 2 SVGs and use something like flexbox to handle the flow so it can't overlap? |
The plan for the next major is to remove the current built-in legend and create a new one with HTML, so we can benefit from the Flex and other nice CSS text placement SVG miss. |
I'm closing this one for the same reason as #13787 The next major moves legend outside of the SVG so this should not be an issue anymore. |
This issue has been closed. If you have a similar problem but not exactly the same, please open a new issue. Note @ValberJunior How did we do? Your experience with our support team matters to us. If you have a moment, please share your thoughts in this short Support Satisfaction survey. |
Search keywords
responsiveChartContainer for PieChart
Related page
https://mui.com/x/react-charts/pie/
Kind of issue
Missing information
Issue description
I have a small problem with responsiveness when using Pie Charts.
In the documentation there is a brief mention of the "RespomsiveChartContainer", but it doesn't show any example of use with Pie Chart, and I try to add it to my code and the Pie Chart doesn't render.
On large screens, the subtitles are clearly visible, but when I reduce the screen,the subtitles are scrambled in the chart. Is there anything I can do to make it responsive without losing the subtitles?
Context
Current code:
The text was updated successfully, but these errors were encountered: