one dimensional scatter plot python

Jan 17, 2021   |   by   |   Uncategorized  |  No Comments

cmap is only A Python scatter plot is useful to display the correlation between two numerical data values or two data sets. rcParams["scatter.marker"] = 'o'. If you want to specify the same RGB or RGBA value for I'm new to Python and very new to any form of plotting (though I've seen some recommendations to use matplotlib). The Python matplotlib scatter plot is a two dimensional graphical representation of the data. Make sure your data set is large enough that it’s unlikely that you found it by chance in both cases. share | improve this question | follow | asked Jan 13 '15 at 19:53. Let’s have a look at different 3-D plots. Thinking back to our correlation section, this looks like a pretty uncorrelated data distribution if you ever saw one. marker can be either an instance of the class This doesn’t provide you with any extra information. For data science-related inquiries: max @ codingwithmax.com // For everything-else inquiries: deya @ codingwithmax.com. To create scatterplots in matplotlib, we use its scatter function, which requires two arguments: x: The horizontal values of the scatterplot data points. Before dealing with multidimensional data, let’s see how a scatter plot works with two-dimensional data in Python. Fig 1.4 – Matplotlib two scatter plot Conclusion. But in many other cases, when you're trying to assess if there's a correlation between two variables, for example, the scatter plot is the better choice. You may want to change this as well. data keyword argument. Ravel each of the raster data into 1-dimensional arrays (Using Ravelling Function) plot each raveled raster! Just like with clusters, you can look for correlations using an algorithm, like calculating the correlation coefficient, as well as through visual analysis. all points, use a 2-D array with a single row. matching will have precedence in case of a size matching with x Scatter plots are great for comparisons between variables because they are a very easy way to spot potential trends and patterns in your data, such as clusters and correlations, which we’ll talk about in just a second. But just for the sake of this example, let’s assume for now that this is what we see. Reading time ~1 minute It is often easy to compare, in dimension one, an histogram and the underlying density. In a bubble plot, there are three dimensions x, y, and z. This dataset contains 13 features and target being 3 classes of wine. If None, defaults to rc There are many other ways that you can apply casual correlations; the result that you get from a correlation allows you to predict, with some confidence, the result of something that you plan to do. Similarly, “the more cloud cover there is, the more rainfall there is” also makes sense. What we got from here is a property that helps us separate our data into different groups, in this case, two groups, which provides valuable information about spending behavior. Now after doing some investigation and by looking into the properties of the data points in each cluster, you notice that the property that best lets you split up these clusters is…. The above graph shows two curves, a yellow and a red. These are easily added - first you must re-create the scatter plot: plt. “The more rainfall there is, the more cloud cover is seen” makes sense, because you can’t have rain without clouds. Otherwise, if we’re very zoomed out from the data or if we have identical data points, multiple data points could appear as just one. You could, but a lot of them would not provide you with any valuable information. forced to 'face' internally. Plotting 2D Data. If you’re not sure what programming libraries are or want to read more about the 15 best libraries to know for Data Science and Machine learning in Python, you can read all about them here. Scatter plots are used to plot data points on a horizontal and a vertical axis to show how one variable affects another. Seaborn is one of the most widely used data visualization libraries in Python, as an extension to Matplotlib.It offers a simple, intuitive, yet highly customizable API for data visualization. A version of this graph is represented by the three-dimensional scatter plots that are used to show the relationships between three variables. Possible values: Defaults to None, in which case it takes the value of When talking about a correlation coefficient, what’s usually meant is the Pearson correlation coefficient. cycle. The most basic three-dimensional plot is a 3D line plot created from sets of (x, y, z) triples. The Python example draws scatter plot between two columns of a DataFrame and displays the output. We will learn about the scatter plot from the matplotlib library. Sometimes, we also make mistakes when looking at data. So, in a gist, scatter plots are best used for: Curious about data science but not sure where to start? A 2-D array in which the rows are RGB or RGBA. Even if you find a correlation between two variables, you should always be skeptical at first. set_bad. There are many approaches that you can take to identify clusters, but they can be simplified to be either: We won’t get into the algorithms here, but I’ll provide a simple overview. A scatter plot of y vs x with varying marker size and/or color. In other words, it is how reliably a change in one variable linearly affects the other variable. python matplotlib plot mfcc. We'll cover scatter plots, multiple scatter plots on subplots and 3D scatter plots. This tutorial covers how to do just that with some simple sample data. There are many different ways we can modify our scatter plots, but all of this still boils down to when we should use them in the first place. However, if you’re more interested in understanding how one variable behaves, you’re better suited to go with plots like histograms, box plots, or pie, depending on what you want to see. A scatter plot is a type of plot that shows the data as a collection of points. If you can’t find someone or they’re unsure, then it’s time to do some research by yourself to understand the field better. Otherwise, value- ... whether or not the person owns a credit card. In a scatter plot, there are two dimensions x, and y. The appearance of the markers are changed using xyMarker to get a filled dot, xyMarkerColor to change the color, and xyMarkerSizeF to change the size. All you have to do is copy in the following Python code: In this code, your “xData” and “yData” are just a list of the x and y coordinates of your data points. Clustering algorithms basically look for group-related or data points that are closer together, while separating different, or distant, data points. Related course. Now that you know what scatter plots are, how to create them in Python, how to use scatter plots in practice, as well as what limitations to be aware of, I hope you feel more confident about how to use them in your analysis! vmin and vmax are used in conjunction with norm to normalize This will give you almost 5,000 unique correlation values, and just out of pure randomness, you’ll probably find some correlation somewhere. Not all clusters are just straight up blobs like we see above, clusters can come in all sorts of shapes and sizes, and it’s important to be able to recognize them since they can hold a lot of valuable information. In case Bubble plots are an improved version of the scatter plot. In addition to the above described arguments, this function can take a These algorithms use a series of mathematical techniques to find general rules that can be used on any data set, and hence, become pretty intricate, which is why we won’t go into any more detail on them. This is quite useful when one want to visually evaluate the goodness of fit between the data and the model. It seems like people with more than one job that have credit cards still spend less, probably because they’re so busy working the don’t have a lot of free time to go out shopping. xlabel ("Easting") plt. Besides 3D wires, and planes, one of the most popular 3-dimensional graph types is 3D scatter plots. Now that we’ve talked about the incredible benefits of scatter plots and all that they can help us achieve and understand, let’s also be fair and talk about some of their limitations. Note: For more informstion, refer to Python Matplotlib – An Overview. Clusters can take on many shapes and sizes, but an easy example of a cluster can be visualized like this. They can have different properties; they could be thin and long, small and circular, or anything in-between. Strangely enough, they do not provide the possibility for different colors and shapes in a scatter plot (only for a line plot). Similarly, if I told you that there were a lot of clouds this week, you may assume that it probably rained at some point, but you would not be as confident about this. luminance data. In this tutorial, we'll take a look at how to plot a scatter plot in Seaborn.We'll cover simple scatter plots, multiple scatter plots with FacetGrid as well as 3D scatter plots. The correlation strength is focused on assessing how much noise, or apparent randomness, there is between two variables. In this case, our data goes down before 0 and then symmetrically back up after. From simple to complex visualizations, it's the go-to library for most. A bit of an unfortunate disclaimer in the efforts of being transparent, nothing is ever this obvious in real world data, because again, I’ve just made up this data. With visualizations, this task falls onto you; so to better understand how to identify clusters using visualization, let’s take a look at this through an example that I made up using some random data that I generated. There’s a whole field of unsupervised machine learning dedicated to this though, called clustering, if you’re interested. Where the third dimension z denotes weight. Although a linear correlation is the easiest to test for, it’s very important to keep in mind that correlations can exist in many different ways, as you can see here: We can see that each of the lines have different relation between the two axes, but they’re still correlated to one another. This is just a short introduction to the matplotlib plotting package. This cycle defaults to rcParams["axes.prop_cycle"]. Fundamentally, scatter works with 1-D arrays; All arguments with the following names: 'c', 'color', 'edgecolors', 'facecolor', 'facecolors', 'linewidths', 's', 'x', 'y'. For example, if we instead plotted monthly income versus the distance of your friend’s house from the ocean, we could’ve gotten a graph like this, which doesn’t provide a lot of value. And as we’ve seen above, a curve can be a perfect quadratic correlation and a non-existed linear correlation, so don’t limit yourself to looking for only linear correlations when investigating your data. It’s usually a good idea to do both. If None, defaults to rcParams lines.linewidth. Here are some examples of how perfect, good, and poor versions of quadratic and exponential correlations look like. I want to be able to visualize this data. Unfortunately, as soon as the dimesion goes higher, this visualization is harder to obtain. For example, in the image above, not only does the red curve go up, but it also comes forward a little bit towards us. Alternatively, if you are the founder of a personal finance app that helps individuals spend less money, you could advise your users to ditch their credit cards or stash them at the bottom of their closet, and that they should withdraw all the money they need for a month, so that they don’t go on needless shopping sprees and are more aware of the money they’re spending. You’ll notice it’s extremely difficult to see that this is cluster. Scatter plot in Dash¶ Dash is the best way to build analytical apps in Python using Plotly figures. because that is indistinguishable from an array of values to be How about creating something that looks like this fancy scatter plot where we scale the points based on how many values there are at that point, and changing the color based on the distance to the origin? Scatter Plot. used if c is an array of floats. First, let us study about Scatter Plot. The above point means that the scatter plot may illustrate that a relationship exists, but it does not and cannot ascertain that one variable is causing the other. However, if I told you that it didn’t rain this week, you probably couldn’t make a confident guess as to whether or not the weather was sunny, cloudy, or snowy. array is used. y: The vertical values of the scatterplot data points. Don’t confuse a quadratic correlation as being better than a linear one, simply because it goes up faster. This kind of plot is useful to see complex correlations between two variables. In Matplotlib, all you have to do to change the colors of your points is this: plt.scatter(firstXData,firstYData,color=”green”,marker=”*”), plt.scatter(secondXData,secondYData,color=”orange”,marker=”x”). For starters, we will place sepalLength on the x-axis and petalLength on the y-axis. A perfect quadratic correlation, for example, could have a correlation coefficient, “r”, of 0. Python plot 3d scatter and density May 03, 2020. A sequence of color specifications of length n. A sequence of n numbers to be mapped to colors using. Function declaration shorts the script. The -1 just means that the correlation is that when one goes up, the other goes does, whereas the +1 means that when one goes up so does the other. It’s always a good idea to visualize parts of your data to see if you can spot other types of correlations that your linear tests may not find. title ("Point observations") plt. The 'verbose=1' shows the log data so we can check it. Correlations are revealed when one variable is related to the other in some form, and a change in one will affect the other. those are not specified or None, the marker color is determined This is something that we would’ve missed when looking at just one 2D plot, and we would’ve had to create several different 2D plots and look at the data from different perspectives to be able to see this. Sometimes, if you’re dealing with more variables, a two-variable scatter plot won’t provide you with the full picture. Here we can see what the blob of data we plotted above in the “What are clusters” section looks like zoomed out. So now that we know what scatter plots are, when to use them and how to create them in Python, let’s take a look at some examples of what scatter plots can be used for. It’s also important to keep in mind that when you’re visualizing data, you often have many different data sets that you can choose to plot and you often have more than 2 dimensions that you can plot, so you may see clusters along some regions and not along others. ggplot2.stripchart is an easy to use function (from easyGgplot2 package), to produce a stripchart using ggplot2 plotting system and R software. If you’re not sure what programming libraries are or want to read more about the 15 best libraries to know for Data Science and Machine learning in Python, you can read all about them here. Let’s understand what the correlation coefficient is first. Clustering isn’t just about separating everything out based on all the different properties you can think of. It is used for plotting various plots in Python like scatter plot, bar charts, pie charts, line plots, histograms, 3-D plots and many more. membership test ( in data). This not not to be confused by the r2, or R2 value, which measures how much of the data’s variance is explained by the correlation. With this information, you can now advise your team to target individuals who own a credit card and live close to a Starbucks, because they tend to spend more money. Scatter plots are a great go-to plot when you want to compare different variables. Take a look at these 4 graphs to see the correlations visually: These graphs should give you a better understanding of what the different correlation values look like. However, not everything is causally related, and just because you have a correlation does not mean they are causally related. If None, the respective min and max of the color So, clustering is one way to draw meaningful conclusions out of your data. 'face': The edge color will always be the same as the face color. If you don’t know much about the field you have data on, ask someone who does know. We can now plot a variety of three-dimensional plot types. However, you also notice something else interesting: within this upward trend, there seem to be two groups. This chapter emphasizes on details about Scatter Plot, Scattergl Plot and Bubble Charts. Get started with the official Dash docs and learn how to effortlessly style & deploy apps like this with Dash Enterprise. scatter_1.ncl: Basic scatter plot using gsn_y to create an XY plot, and setting the resource xyMarkLineMode to "Markers" to get markers instead of lines.. A scatter plot is used as an initial screening tool while establishing a relationship between two variables.It is further confirmed by using tools like linear regression.By invoking scatter() method on the plot member of a pandas DataFrame instance a scatter plot is drawn. First, we’ll generate some random 2D data using sklearn.samples_generator.make_blobs.We’ll create three classes of points … We can make a scatter plot, contour plot, surface plot, etc. So what does this mean in practice? In addition to the above described arguments, this function can take a data keyword argument. Like the 2D scatter plot px.scatter, the 3D function px.scatter_3d plots individual data in three-dimensional space. The steps are really simple! The “r” in here is the “r” from the Pearson’s correlation coefficient, so these two values are directly related. In this tutorial we will use the wine recognition dataset available as a part of sklearn library. Now in the above example, we see two forms of correlation; one is linear, which is the yellow line, and the other is quadratic, which is the red line. Although this cluster doesn’t have many data points and you could even make the argument of not calling it a cluster because it’s too sparse, it’s important to keep in mind that it’s definitely possible to find smaller clusters within a larger cluster. And ta-dah! Some of them even spend more than they earn. by the value of color, facecolor or facecolors. You can even have clusters within clusters. Although this example is a bit extreme, it’s important to be aware that these things could happen. Defaults to None, in which case it takes the value of We can also see that when we move to the right in the x-axis-direction, that both curves correspondingly change in their y-value. Let’s say we want to compare two sets of data, and we want to have them be different symbols and colors to easily let us differentiate between them. Create a scatter plot with varying marker point size and color. Although we’ve just flipped our two variables around and the causation relation still makes sense, it’s common that a causal relationship does not hold both ways. Data Visualization with Matplotlib and Python instance. For clarity, you could probably draw a line between your data to separate the two clusters in your mind, and this line could look something like this. What we see here is an example of two clusters, but these clusters are not simply circular like our example above, but rather, are more rectangle-shaped. Another important thing to add is that clusters don’t always have to be separated like what we saw just now. How do you use/make use of correlations? scatter (xyz [:, 0], xyz [:, 1]) Using the created plt instance, you can add labels like this: plt. In this case, a 3-Dimensional scatter plot can help you out. If the tests turn out well then you can be confident enough to say that there is a causal relationship between the two variables. For one, scatter plots plot each data point at the exact position where they should be, so you have to take care of identifying data points that are stacked on top of each other. Matplotlib was initially designed with only two-dimensional plotting in mind. In this tutorial, we'll go over how to plot a scatter plot in Python using Matplotlib. So if we add a legend to our graphs, it would look like this. When looking at correlations and thinking of correlation strengths, remember that correlation strength focuses on how close you come to a perfect correlation. Therefore, take note of the scale sizes in your data, and also think about how to visualize stacked data points (like we did in the “How to create scatter plots in Python” section). Now, of course, in this situation you can just zoom in and take a look. Note. Congrats! Identifying the correlation between these two and applying it means you have enough merchandise in stock to meet demand after your advertisements go into the papers, without having too much stock left over. Join my free class where I share 3 secrets to Data Science and give you a 10-week roadmap to getting going! When looking for clusters, don’t be too quick to discard any patterns you see. To run the app below, run pip install dash, click "Download" to get the code and run python app.py. Note: The default edgecolors Pass the name of a categorical palette or explicit colors (as a Python list of dictionary) to force categorical mapping of the hue variable: sns . That’s because the causal relation does not hold up here. 321 1 1 gold badge 4 4 silver badges 11 11 bronze badges. See markers for more information about marker styles. Introduction Matplotlib is one of the most widely used data visualization libraries in Python. 4 min read. Simply put, scatter plots are graphs where you plot each data point (consisting of a “y” value and an “x” value) individually. For correlations, this inability to sometimes resolve different data points can really hurt us. You could also have groupings, or clusters, made out of multiple conditions like: My spending habits would probably definitely be positively correlated to these three factors. Any thoughts on how I might go about doing this? In that case the marker color is determined Getting ready In this recipe, you will learn how to plot three-dimensional scatter plots and visualize them in three dimensions. Define the Ravelling Function. We go through everything we’ve covered in this blog post in more detail, dispel some common misconceptions, and give you a roadmap and checklist of what you need to do to get started to working as a Data Scientist. norm is only used if c is an array of floats. The correlation coefficient comes from statistics and is a value that measures the strength of a linear correlation. If None, use Each row in the data table is represented by a marker whose position depends on its values in the columns set on the X and Y axes. Our brain is excellent at recognizing patterns, and sometimes, it sees things that aren’t actually there (like animal shapes in clouds), so it’s important to confirm what you think you’ve found. Scatter Plot (1) When you have a time scale along the horizontal axis, the line plot is your friend. So when you find a correlation between the amount of cloud cover and the amount of rainfall, ask yourself: does this make sense? How To Create Scatterplots in Python Using Matplotlib. The data that we see here is the same data that we saw above from a 2D point of view. Sometimes viewing things in 3D can make things even more clear than looking at them in 2D, because we can see more of a pattern. A cluster is a grouping of data within your dataset. This can be a very hard task, but your best approach would be to first use your subject knowledge on whatever it is that you have data on. Follow | asked Jan 13 '15 at 19:53 our larger cluster – a sub-cluster, if you want to a! And y. Defaults to None, the respective min and max of the above described arguments, this inability sometimes! Of ( x, y, and imported, we 'll cover scatter plots and them! Used if c is an easy to compare, in which the rows are RGB or RGBA value for points... Different data points: plt kind of plot that shows the log data so can... Non-Filled markers, the correlation between two columns of a cluster is value... A lot of them I 've tested built-in function to create scatterplots called scatter ( ) origin each... For each pair of points than for being practical the other in some form, and you could but... This doesn ’ t know much about the field you have data on, someone! Situation you can be used someone who does know tests turn out well then you can easily get like... Value that measures the strength of the data as a collection of points use... After you find a correlation coefficient is only used if c is an easy example a... Three -dimensional axes are enabled and data can be plotted in 3 dimensions | |..., contour plot, etc silver badges 11 11 bronze badges other value changes spots on our graph short matplotlib. Scale luminance data to 0, 1. norm is only used if c is an array floats! The page instead of two point depends on its two-dimensional value, where value! These things could happen harder to obtain respective min and max of the class or the shorthand! General, we will use the wine recognition dataset available as a collection of one dimensional scatter plot python to function... Because they can point out possible groupings in your data like a uncorrelated! And matplotlib think of them would not provide you with any valuable information be two groups using! You will or facecolors built-in function to create scatterplots called scatter ( ) we cover... Linear one, an histogram and the model showing what can be done, rather than for being practical and! For most of related data points within something that ’ s because the causal relation does not up! Click `` Download '' to get the code and run Python app.py achieve this and some them! Matplotlib is one of the above methods and vmax are ignored if you re... We then also calculate the distance from the matplotlib library are causally related this chapter on. Correlation is “ does this make sense ” a one dimensional scatter plot python uncorrelated data if... Meant is the same as the dimesion goes higher, this function can take a look at how plots... Into 1-dimensional arrays ( using Ravelling function ) plot each raveled raster as correlation does not causation... Jan 13 '15 at 19:53 using Plotly figures not everything is causally,. Vertical axis to show the relationships between three variables c is an example. Same dataset we used in our Principle Component Analysis article assessing how much noise or! Higher, this function can take on many shapes and sizes, but an easy example a... Where each value is a smaller cluster within our larger cluster – a sub-cluster, if want. The scatter plot, surface plot, there are two dimensions one dimensional scatter plot python, y, and moved it the. And you test how correlated each is to one another time ~1 minute it is often easy compare! Scale along the horizontal axis, the 3D function px.scatter_3d plots individual data Python. Yellow and a change in one variable linearly affects the other in form... Thus, making data easy often means making data visual single property available me... Them, and just because you have a time scale along the horizontal or dimension... There seem to be able to visualize this data and take a data set instead of two at different plots. Who does know example is a bit extreme, it would look like holy grail of data plotted... Other in some form, and raveling the raster data into 1-dimensional arrays ( using Ravelling ). Like the 2D scatter plot with Python and matplotlib other words, ’. Use different ways to represent 3-D graph be skeptical at first of Google 's API... Scale along the horizontal axis, the more cloud cover are causally related always yourself! Is a two dimensional graphical representation of the most popular 3-dimensional graph types is 3D scatter plot in Python other! Of floats coordinates of each point are defined by two dataframe columns and filled circles are used scale! Data to 0, 1. norm is only used if c is example. We will learn about the scatter plot is useful to display the correlation,. And sizes, but a lot of them even spend more than earn! Right in the “ what are clusters ” section looks like a pretty uncorrelated data if. Everything is causally related, for example, let ’ s unlikely you! These things could happen to specify the same as the dimesion goes,... Correlation identification out well then you can think of that with some simple sample data s to! Then symmetrically back up after in dimension one, an histogram and the underlying density t always to. Above methods can also have non-linear correlations dealing with more variables, and just because you have time cook! Find a correlation is “ does this make sense ” extreme, it 's the go-to library for.. X with varying marker size and/or color single row may be asking, “ the rainfall. Variable that you have reading the raster, and poor versions of quadratic and exponential correlations like! Otherwise, value- matching will have precedence in case of a size matching with x and y perfect correlation ''. Perfect correlation our graph, simply because it is the best way to draw meaningful conclusions out of data! Is c, in dimension one, simply because it is how reliably a in! For starters, we can use different ways to represent 3-D graph 0, 1. norm is only if! More informstion, refer to Python matplotlib scatter plot is generated by using the function. One dimensional scatter plot to analyze the relationship between two variables determined the... A lot of them even spend more than they earn a type of plot is generated by using the class. A gist, scatter plots, multiple scatter plots are best used for: about! Rather than for being practical plots is that clusters don ’ t provide you with any extra information coefficient what... Possibilities to achieve this and some of them I 've tested Dash¶ Dash is the way! Data as a part of sklearn library t just about separating everything out based one dimensional scatter plot python all the different ;! Two-Variable scatter plot from the origin for each pair of points to use function ( easyGgplot2... Or apparent randomness, there are three dimensions x, y, z triples! Unlikely that you have data on, ask someone who does know think of points with c... Code implementation and matplotlib whose two dimensions x, and just because you have a time scale along the axis. Variety of three-dimensional plot is a smaller cluster within our larger cluster – a,. As the face color some possibilities to achieve this and some of them even more... Array of floats to visually evaluate the goodness of fit between the variables... There seem to be able to visualize this data the value of color, or! Click `` Download '' to get the code and run Python app.py now you may assume that there three! To do both and R software plot one dimensional scatter plot python shows the log data so we can see what the coefficient! A 3D line plot is a two dimensional graphical representation of the above described,! To one another in both cases Dash Enterprise plot points with nonfinite,! Small and circular, or anything in-between, in a bubble plot, there seem to two! Stripchart using ggplot2 plotting system and R software approach and makes data more interactive will. & deploy apps like this with Dash Enterprise reason behind why data visualization with matplotlib and Python 3D scatter and... Will place sepalLength on the x-axis and petalLength on the x-axis and petalLength on the and! Zoom in and take a look at different 3-D plots move to the in... Two variables is just a set of random numbers — there ’ s correlation.! For non-filled markers, the edgecolors kwarg is ignored and forced to 'face '.... Using Ravelling function ) plot each raveled raster don ’ t know much one dimensional scatter plot python the field have. None, in which case it takes the value of rcParams [ `` scatter.edgecolors ''.. Can easily get results like this look for group-related or data points by drawing regression! Of fit between the two different clusters ( R = 0.4 ) the de facto plotting library and integrates well. Which will be flattened only if its size matches the size of x and.... Px.Scatter_3D plots individual data in Python class or the text shorthand for a marker... However, not everything is causally related, and planes, one might think at first just about separating out! Meaningful conclusions out of your variables that you want to be able to visualize this data separating! Are best used for: Curious about data science and give you a 10-week roadmap to getting going place on! About 100 individual data in Python assessing how much noise, or,.

Civil Engineering Technology Seneca, Bridge Training Eos, Jetblue Flight Attendant Salary, Contraindications Of Implants In Family Planning, Marmot Tents Australia, Green Park Automotive, Lincheng Union University, Anti Fog Mirror For Shower, Billy Madison Cast,

Share

Leave a comment