Highcharts系列线和y轴线无法格式化。

huangapple go评论144阅读模式
英文:

Highcharts series line and yAxis line not able to format

问题

我刚刚看了你提供的代码,这是一个使用HighCharts和JavaScript创建图表的函数。根据你的描述,你遇到了一些问题,无法更改系列的线宽并且无法在图表中添加y轴线条。你尝试了一些方法,包括使用plotOption和重新绘制线条,但是无论如何线条的粗细都没有改变。甚至在添加悬停效果时,除了标记变大之外,没有任何其他变化。

你认为可能是某些代码覆盖了设置或者顺序有误。你希望有人能够帮助你解决这个问题。

根据你提供的代码,我看到你创建了一个名为createChart的函数,它接受一些参数来创建图表。你还有一个名为processData的函数,用于处理数据。

如果你能提供更多关于问题的信息,比如你添加的代码部分以及你期望的结果,我将能够更好地帮助你解决问题。

英文:

I am new to using HighCharts and Javascript. Through tutorials and trial and error I have been able to get a working highcharts. The only problem now is I think I have added in some code that is making it so that I can not change the lineWidth for any of the series and cannot add a yAxis line to my chart. I have tried everything from plotOption, trying to redraw the lines and no matter what nothing on the lines change in thickness. Not even when adding hover the lines does anything happen other than the markers get bigger.

The backend works fine the html works fine. I can dynamically bring in the charts and view them and export them. Just I can not for the life of me get the lineWidth to thicken or get the yAxis to show. I event tried setting the HighChart default settings and nothing changes when it comes to lineWidth or yAxis.

I think something is overwriting the settings or my sequence is wrong. But I have not been able to figure it out. I am hopping some can help.

Here is a picture of my HTML: HTML of working Chart

Here is my code:

function createChart(container, title, data, hasValue2, hasValue3, isPercentage, isReversed) {
const chartId = 'chart_' + container;
console.log('Creating chart with ID:', chartId);
// Call the createChartCard function to wrap the chart in a Bootstrap card
createChartCard(title, chartId);
// Call Highcharts.chart() after appending the chart container to the DOM
console.log('Rendering chart:', chartId);
// Create the Highcharts chart
Highcharts.chart(chartId, {
chart: {
borderColor: '#4572A7',
plotBorderWidth: 2,
//plotBorderColor: '#CCCCCC',
type: 'line',
// width: 400, // Adjust the width as needed
// height: 200, // Adjust the height as needed
},
credits: {
enabled: false
},
title: {
text: title,
style: {
fontSize: '16px', // Set the font size to 10 pixels
},
},
exporting: {
enabled: true, // Enable exporting
chartOptions: {
chart: {
width: 841, // Set the chart width to fit the landscape A4 paper (841mm)
height: 595, // Set the chart height to fit the landscape A4 paper (595mm)
margin: [50, 50, 50, 50], // Set the chart margins (top, right, bottom, left)
},
},
},
legend: {
enabled: hasValue2 || hasValue3, // Show legend if either value2 or value3 is present
itemStyle: {
color: 'transparent', // Make the legend text color transparent
},
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
labelFormatter: function () {
// Hide legend entry for "Series3" when chart only has "value1" and "value2"
if (!hasValue3 && this.name === 'Series 3') {
return '';
}
return this.name; // Show other legend entries as usual
},
},
xAxis: {
//lineColor: '#FF0000',
lineWidth: 2,
tickLine: 0,
tickLength: 0,
//lineColor: 'transparent',
type: 'datetime',
//title: {
// text: 'Date',
// },
labels: {
rotation: -90,
y: 10,
formatter: function () {
// Custom formatter function to display the date as "dd/m/yyyy" without leading zeros in the year
// const date = new Date(this.value);
//const day = date.getDate();
// const month = date.getMonth() + 1; // Months are zero-based, so we add 1
// const year = date.getFullYear().toString().slice(-2); // Get the last two digits of the year
// Concatenate the formatted date components
//return day + '/' + month + '/' + year;
return Highcharts.dateFormat('%e %b %y', this.value);
},
style: {
fontSize: '12px', // Set the font size to 10 pixels
},
},
//offset: 0, // Set the offset to move the labels closer to the chart
},
yAxis: {
title: {
text: isPercentage ? 'Percentage' : '',
},
reversed: isReversed,
labels: {
x: -10,
formatter: function () {
if (isPercentage) {
return this.value;
} else if (Math.round(this.value) === this.value) {
return this.value; // Display as a whole number if it is an integer
} else {
return this.value.toFixed(2); // Otherwise, display with 2 decimal places
}
if (isReversed) {
return -this.value; // Reverse the axis values
} else {
return this.value;
}
},
style: {
fontSize: '12px', // Set the font size to 10 pixels
},
},
//offset: 0, // Set the offset to move the labels closer to the chart
max: isPercentage ? 100 : null,
//softMin: isPercentage ? 0 : 0,	   // Set max to 100 if isPercentage is true
},
tooltip: {
formatter: function () {
let tooltip = Highcharts.dateFormat('%Y-%m-%d', this.x) + '<br>';
if (isPercentage) {
tooltip += 'Percentage: ' + (this.y).toFixed(2) + '<br>';
} else if (Math.round(this.y) === this.y) {
tooltip += 'Value: ' + this.y + '<br>';
} else {
tooltip += 'Value: ' + this.y.toFixed(2) + '<br>';
}
if (hasValue2 && this.point.y2 !== undefined) {
if (isPercentage) {
tooltip += 'Percentage 2: ' + (this.point.y2).toFixed(2) + '<br>';
} else if (Math.round(this.point.y2) === this.point.y2) {
tooltip += 'Value 2: ' + this.point.y2 + '<br>';
} else {
tooltip += 'Value 2: ' + this.point.y2.toFixed(2) + '<br>';
}
}
if (hasValue3 && this.point.y3 !== undefined) {
if (isPercentage) {
tooltip += 'Percentage 3: ' + (this.point.y3).toFixed(2) + '<br>';
} else if (Math.round(this.point.y3) === this.point.y3) {
tooltip += 'Value 3: ' + this.point.y3 + '<br>';
} else {
tooltip += 'Value 3: ' + this.point.y3.toFixed(2) + '<br>';
}
}
return tooltip;
},
},
series: [
// Series 1 (value1)
{
name: '',
data: data.map(item => ({
x: Date.parse(item.x),
y: isPercentage ? item.y : parseFloat(item.y),
})),
color: 'black', // Default line color for Value 1
//visible: !hasValue2 && !hasValue3, // Show only if value2 and value3 are false
lineWidth: 4, // Increase the line width for this series
marker: {
enabled: true,
radius: 4, // Increase the marker size for this series
}, 
},
// Series 2 (value2)
hasValue2
? {
name: '',
data: data.map((item, index) => ({
x: Date.parse(item.x),
y: item.y2 !== undefined ? (isPercentage ? item.y2 : parseFloat(item.y2)) : null,
//color: index > 0 && item.y2 < data[index - 1].y2 ? 'red' : 'black',
})),
dashStyle: 'dot', // Set dash style for Value 2
showInLegend: hasValue2,
lineWidth: 3, // Set the line width to 3
color: 'black', 
marker: {
enabled: true,
radius: 4, // Increase the marker size for this series
symbol: 'circle', // Increase the marker size for this series
},
}
: {},
// Series 3 (value3)
hasValue3
? {
name: '',
data: data.map(item => ({
x: Date.parse(item.x),
y: item.y3 !== undefined ? (isPercentage ? item.y3 : parseFloat(item.y3)) : null,
})),
color: 'black', // Default line color for Value 3
dashStyle: 'longdash', // Set dash style for Value 3
showInLegend: hasValue3,
lineWidth: 4, // Increase the line width for this series
marker: {
enabled: true,
radius: 4, // Increase the marker size for this series
symbol: 'circle',// Increase the marker size for this series
}, 
}
: {},
],
});
}
function createChartCard(title, chartId) {
const cardHtml = `
<div class="col-md-6">
<div class="card h-100 w-100">
<div class="card-body" style="height: 100%;">
<div id="${chartId}"></div>
</div>
<div class="card-footer text-muted"></div>
</div>
</div>
`;
$('#chartContainer').append(cardHtml);
}
function processData(data) {
const chartsData = {};
data.forEach((row) => {
const chartname = row.chartname;
const isPercentage = Boolean(parseInt(row.ispercentage)); // Convert '0' to false, '1' to true
const isReversed = Boolean(parseInt(row.isreversed)); // Convert '0' to false, '1' to true
console.log(row.isreversed);
if (!chartsData[chartname]) {
chartsData[chartname] = {
title: row.user + ' - ' + row.jobname + ' - ' + chartname,
data: [],
hasValue2: false,
hasValue3: false,
isPercentage: isPercentage,
isReversed: isReversed,
};
}
const x = row.wedate;
const y = parseFloat(row.value1);
let dataPoint = { x, y };
if (row.value2 !== null) {
dataPoint.y2 = parseFloat(row.value2);
chartsData[chartname].hasValue2 = true;
}
if (row.value3 !== null) {
dataPoint.y3 = parseFloat(row.value3);
chartsData[chartname].hasValue3 = true;
}
chartsData[chartname].data.push(dataPoint);
chartsData[chartname].isPercentage = isPercentage; // Set isPercentage property for the chart
chartsData[chartname].isReversed = isReversed; // Set isReversed property for the chart
});
return Object.values(chartsData);

答案1

得分: 0

根据您提供的代码和演示,您的项目中加载了Highcharts样式,并且它们覆盖了图表选项。在这种情况下,您需要使用CSS样式来解决这个问题。您可以在以下文章中了解有关Highcharts样式的更多信息:https://www.highcharts.com/docs/chart-design-and-style/style-by-css

.highcharts-yaxis .highcharts-axis-line {
    stroke-width: 10;
}

演示:
https://jsfiddle.net/jsfiddle_demo/xg4cv5ak/

英文:

Based on the code and demo you provided, there are Highcharts styles loaded in your project and they override the chart options. In that case, you need to use CSS styling to fix that. You can read more about styles in Highcahrts in the following article: https://www.highcharts.com/docs/chart-design-and-style/style-by-css

.highcharts-yaxis .highcharts-axis-line {
stroke-width: 10;
}

Demo:
https://jsfiddle.net/jsfiddle_demo/xg4cv5ak/

huangapple
  • 本文由 发表于 2023年8月9日 12:16:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/76864538.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定