图表 x 轴编号

2023-12-08

我正在使用 WinForms 图表来可视化一些数据。我想要 x 轴网格线位于我指定的点处。请看下面的例子。

public partial class Form1: Form
{
    public Form1()
    {
        InitializeComponent();            
        AddPoints();
    }

    public void AddPoints()
    {
        for (int i = 0; i <= 100; i++)
            chart1.Series[0].Points.AddXY(i, i);
    }
}

在图表中,您可以看到 X 轴的网格线出现在 19,39,59,79 和 99 处。但我希望它出现在 0,15,45,65,90,100 处。可以明显看到间隔不一样。所以设置间隔是没有用的。是否可以在我自己指定的点上有网格线?

chart image


这是不可能的GridLines因为它们总是在固定的位置绘制Interval间距。这是通过在中绘制线条来解决问题的示例xxxPaint event..

首先我们声明一个止损值列表GridLines我们想要:

List<double> stops = new List<double>();

然后我们准备图表:

AddPoints();

ChartArea ca = chart1.ChartAreas[0];
ca.AxisX.Minimum = 0;  // optional
ca.AxisX.MajorGrid.Enabled = false;
ca.AxisX.MajorTickMark.Enabled = false;
ca.AxisX.LabelStyle.Enabled = false;

stops.AddRange(new[] { 0, 15, 45, 50.5, 65, 90, 100 });

请注意我已经添加了一项额外价值 (50.5)来展示我们如何绘制GridLines即使没有DataPoints are!

然后我们编码PostPaint event:

private void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
    Graphics g = e.ChartGraphics.Graphics;
    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

    ChartArea ca = chart1.ChartAreas[0];

    Font font = ca.AxisX.LabelStyle.Font;
    Color col = ca.AxisX.MajorGrid.LineColor;
    int padding = 10; // pad the labels from the axis

    int y0 = (int)ca.AxisY.ValueToPixelPosition(ca.AxisY.Minimum);
    int y1 = (int)ca.AxisY.ValueToPixelPosition(ca.AxisY.Maximum);

    foreach (int sx  in stops)
    {
        int x = (int)ca.AxisX.ValueToPixelPosition(sx);

        using (Pen pen = new Pen(col))
            g.DrawLine(pen, x, y0, x, y1);

        string s =  sx + "";
        if (ca.AxisX.LabelStyle.Format != "") 
            s = string.Format(ca.AxisX.LabelStyle.Format, s);

        SizeF sz = g.MeasureString(s, font, 999);
        g.DrawString(s, font, Brushes.Black, (int)(x - sz.Width / 2) , y0 + padding);
}

这是结果:

enter image description here

请注意,大部分代码都在PostPaint活动只是准备;线条和标签的两个实际绘图调用是普通的GDI+方法..

请注意我已经添加了DataPoint循环中每 10 个点的标签以显示我们所在的位置:

chart1.Series[0].Points.AddXY(i, i);
if (i%10 == 0) chart1.Series[0].Points[i].Label = "#VAL / #VALY";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图表 x 轴编号 的相关文章

随机推荐

  • Lucene 近实时搜索

    我正在使用 Lucene 6 6 0 我想使用 Lucene 的近实时搜索功能 但是 我无法实现它 我尝试获取该功能的方式如下 我初始化一个 IndexReader 实例 this reader DirectoryReader open t
  • 为什么 count(DOMNode->childNodes) 返回错误的子节点数? (PHP 和 XML)[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有一个名为 processDeleteForm 的 PHP 函数 旨在从名为 Stru
  • 通过引用将 $scope 变量传递给函数

    我一直在尝试实现采用范围变量并更改其原始值的函数 但没有成功 var app angular module plunker app controller MainCtrl function scope scope var1 1 scope
  • 使用 Javascript 检查 Flash 播放器版本 [重复]

    这个问题在这里已经有答案了 是否可以使用 Javascript 检查浏览器中安装的 Flash Player 的版本 你可以检查一个例子here
  • C++ getter/setter 编码风格

    我已经使用 C 编程有一段时间了 现在我想温习我的 C 技能 上课情况 class Foo const std string name 最好的方法是什么 我只想允许对 name 字段进行读取访问 使用 getter 方法 inline co
  • UDP 是 IPC 的可靠协议吗?

    如果我纯粹使用 UDP 进行进程间通信 即在 1 个系统中 不涉及网络 我可以认为它可靠吗 或者我还需要担心数据包丢失等问题吗 Note这是一个实际的问题 而不是理论问题 如果不同操作系统的答案有所不同 请解释具体情况 特别是包括 Wind
  • 如何使 NSURLConnection 文件下载工作?

    我有一个 ViewController 声明为 interface DownloadViewController UIViewController
  • 对 JavaScript 中的文档尺寸感到困惑

    我对 JavaScript 中用于获取文档尺寸的不同属性以及如何获取这些数字感到非常困惑 有人可以推荐一个好地方来开始了解我如何获取文档的大小并正确放置内容吗 我会尽量简单地回答 文档和视口 在几何方面 有两组尺寸需要注意 文档尺寸 反映加
  • Android Studio安装后无法启动

    安装Android Studio后 无法启动 但在获取Android SDK组件信息时显示以下错误 Internal error Please report to https code google com p android issues
  • 设置复合索引时出错

    我想在我的 mongoDB 中的 fb id 和 ts 上设置复合索引 所以我做了 PRIMARY gt db sessions ensureIndex fb id 1 ts 1 unique true 但我收到以下错误 E11000 du
  • 打印变量的名称和值

    在调试的时候 我们经常会看到这样的打印语句 print x easy to type but no context print x x more context harder to type 12 x 12 如何编写一个函数来获取变量或变量
  • 在tomcat中部署jar

    可以在 tomcat 中部署一个简单的 jar 并运行它 一个简单的例子 就是执行 main 并打印 hello world P 不 这不对 您必须创建一个包含 jar 和 servlet 至少 的 Web 应用程序 看看这个http do
  • 将端口号绑定到 TCP 套接字(outgoin)以发送数据包

    我知道这并不容易绑定端口号 to TCP套接字你会用来发送数据 因为系统通常将随机端口绑定到套接字 但我读到一篇文章 通过使用一些低层网络可以将端口号绑定到 TCP 套接字然后使用它发送数据的方法吗 有谁知道如何做到这一点 我正在使用c语言
  • 未为右值引用调用 C++ 移动构造函数[重复]

    这个问题在这里已经有答案了 class MyClass public MyClass std cout lt lt default constructor n MyClass MyClass a std cout lt lt copy co
  • Xamarin for Visual Studio 2015 中的配置文件错误(无匹配)

    我正在尝试在 iPhone 上构建 运行 Xamarin Forms PCL 以进行测试和调试 我突然收到以下错误 没有 iOS 签名身份与指定的配置文件匹配 正如您从下图中看到的 它正在寻找的配置文件位于 Mac 上的正确位置 我清除了所
  • 调整cell.UIImageView.image的大小

    我也有不同尺寸的不同图像 我想将其放在每个单元格中的 cell imageView image 中 但我想在每个单元格中制作相同的尺寸 尽管图像具有不同的尺寸 我在我的代码中写下这一点 UIImage image UIImage image
  • 对“Makefile”无需执行任何操作

    我应该为我需要做的项目编写一个 Makefile 我已经完成了所有工作 但是当我尝试这样做时 我得到以下输出 make 对 Makefile 无需执行任何操作 造成这种情况的原因可能是什么 这是我的 Makefile 文件 Makefile
  • 将 GLM 公式设置为 R 中的列总和

    我正在尝试设置公式GLM作为列的集合train train 1 99 model lt glm train 100 train 1 99 data train family binomial 无法找到在 R 中执行此操作的正确方法 如果你需
  • 就浮点而言,是否有正确的常量表达式用于其最高有效位?

    问题 给定一个浮点常量表达式 我们可以编写一个宏来计算一个常量表达式 该常量表达式的值是等于尾数最高位的 2 的幂吗 等效地 这只是小于或等于输入幅度的两个的最大幂 出于这个问题的目的 我们可以忽略 接近溢出或接近下溢值 它们可以通过有限多
  • 图表 x 轴编号

    我正在使用 WinForms 图表来可视化一些数据 我想要 x 轴网格线位于我指定的点处 请看下面的例子 public partial class Form1 Form public Form1 InitializeComponent Ad