我有一个实现Novacode.LineChart的代码。默认情况下显示的LineChart类型是:

但是我不想要这种类型的图表,我想要它没有点,像这样:

这是我创建图表的代码:
LineChart c = new LineChart();
c.AddLegend(ChartLegendPosition.Bottom, false);
c.Grouping = Grouping.Stacked;有人知道我怎么能隐藏thoose点,只显示线条?感谢大家!!
发布于 2017-12-27 22:38:39
你的问题出现时,我正在寻找完全相同的功能。现在可能有点晚了,但我希望它能对其他需要此功能的人有所帮助。
我所谓的答案不过是几行肮脏和无法管理的黑客攻击,因此除非您不迫切需要,否则我不建议这样做。
我也不知道这是否是一种经过批准的方法,但我更喜欢一步一步地编写解决方案,这样可以帮助您掌握概念并使用更好的方法。
当我意识到我无法使用DocX创建没有标记的线条图之后,使用当前提供的API,我想知道实际输出和期望输出之间有什么区别。因此,在手动编辑图表以获得预期结果后,我保存了一个带有行图的.docx文件副本。
您可能已经知道,.docx是一种容器格式,本质上是由几个不同的文件夹和文件组成的。您可以使用.zip归档提取器打开它。我在这个任务中使用了7-Zip,并在/word/charts/chart1.xml的位置找到了图表文件,但这可能因文件的不同而有所不同,但您可以很容易地找到它。
比较了chart1.xml两种文件的不同之处:没有标记的文件和附加属性的额外XML标记;
<c:marker>
<c:symbol val="none" />
</c:marker>我不得不将这段代码添加到图表中。我将这些添加到DocX提供的示例代码中。您可以从以下网站跟进:DocX/ChartSample.cs
这是乐趣的开始。先简单一点。
using System.Xml;
using System.Xml.Linq;
using Xceed.Words.NET;
// Create a line chart.
var line_chart = new LineChart();
// Create the data.
var PlaceholderData = ChartData.GenerateRandomDataForLinechart();
// Create and add series
var Series_1 = new Series("Your random chart with placeholder data");
Series_1.Bind(PlaceholderData, "X-Axis", "Y-Axis");
line_chart.AddSeries(Series_1);
// Create a new XmlDocument object and clone the actual chart XML
XmlDocument XMLWithNewTags = new XmlDocument();
XMLWithNewTags.LoadXml(line_chart.Xml.ToString());我已经将XPath可视化工具用于确定XPath查询,这一点很重要,因为您不能仅仅将标记添加到某个地方,并期望它能够正常工作。我为什么要告诉你这个?因为我在一条随机行上附加了标记标记,并期望它能正常工作。天真。
// Set a namespace manager with the proper XPath location and alias
XmlNamespaceManager NSMngr = new XmlNamespaceManager(XMLWithNewTags.NameTable);
string XPathQuery = "/c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser";
string xmlns = "http://schemas.openxmlformats.org/drawingml/2006/chart";
NSMngr.AddNamespace("c", xmlns);
XmlNode NewNode = XMLWithNewTags.SelectSingleNode(XPathQuery, NSMngr);现在,在新创建的具有指定命名空间的XML文档对象上创建必要的标记。
XmlElement Symbol = XMLWithNewTags.CreateElement("c", "symbol", xmlns);
Symbol.SetAttribute("val", "none");
XmlElement Marker = XMLWithNewTags.CreateElement("c", "marker", xmlns);
Marker.AppendChild(Symbol);
NewNode.AppendChild(Marker);我们应该将最新更改的内容复制到实际的XML对象中。但是,可以理解,它被定义为私有对象,因此它是一个只读对象。这就是我想“好吧,我已经摆弄够了这个了,我最好再找一个图书馆”的地方,但出于原因,我决定继续下去。
下载DocX回购,将这行更改为
get; set;重新编译,将Xceed.Words.NET.dll复制到projectfolder/packages和projectfolder/projectname/bin/Debug文件夹,最后几行是
// Copy the contents of latest changes to actual XML object
line_chart.Xml = XDocument.Parse(XMLWithNewTags.InnerXml);
// Insert chart into document
document.InsertChart(line_chart);
// Save this document to disk.
document.Save();值得吗?我不确定,但我在工作中学到了一些东西。在这个答案中可能有很多错误的编程实践,所以如果你看到一个,请告诉我。对不起,我的英语。
https://stackoverflow.com/questions/42399053
复制相似问题